Android不同Module之间Activity跳转(以腾讯IMDemo为例)

近些天在搞腾讯IM,整体看来,没什么难度,统一跟着官方文档和Demo走就能完成大部分需求,但是我昨天就碰到一个棘手的问题。
这里我集成的TuiKit本地Module,方便修改页面什么的。这里腾讯4.4.900版本也意识到跳转页面的麻烦,专门在Demo中主app模块来创建Activity,在tuikit中写Layout布局,以方便注册Activity和资源文件分开,但是就唯独群聊详情页面自己在TuiKit中创建的,而我这边恰恰刚好是需要重写添加新成员按钮的监听,然而这个按钮在TuiKit里面,没有办法去跳转主app的Activity。
最后我绞尽脑汁在最后想到了一个办法。这里分享一下。想解决问题就必须得研究透彻页面之间的跳转顺序和流程。这里我简单说一说腾讯IM的Demo跳转流程

第一步:找到消息列表点击群Item的页面跳转。进入ChatActivity
Android不同Module之间Activity跳转(以腾讯IMDemo为例)_第1张图片
第二步:由此可知这里ChatActivity是所有聊天页面的根Activity,其区别在于跳转时传入不同的参数生成不同的ChatFragment,然后在这里就完成了嵌套TuiKit里面的ChatLayout布局。
Android不同Module之间Activity跳转(以腾讯IMDemo为例)_第2张图片

Android不同Module之间Activity跳转(以腾讯IMDemo为例)_第3张图片
第三步:在ChatLayout的布局里面就找到了顶部TopBar的右侧图片点击监听,这里继续点进去,进去之后发现有生成一个Fragment
Android不同Module之间Activity跳转(以腾讯IMDemo为例)_第4张图片
Android不同Module之间Activity跳转(以腾讯IMDemo为例)_第5张图片
第四步:最后在这个fragment里面就找到了添加的监听方法,由于有两个添加按钮的地方,所以要修改两个地方。
Android不同Module之间Activity跳转(以腾讯IMDemo为例)_第6张图片
Android不同Module之间Activity跳转(以腾讯IMDemo为例)_第7张图片
Android不同Module之间Activity跳转(以腾讯IMDemo为例)_第8张图片
Android不同Module之间Activity跳转(以腾讯IMDemo为例)_第9张图片

解决问题
第一步:既然已经找到问题点了,剩下的就是回归主题该怎么处理。
首先在TuiKit模块儿中创建一个接口和一个单例类

public interface OnAddMemberCallBack{
        void addMember(GroupInfo groupInfo);
    }
public class MyCallback {
    private MyCallback(){}
    private static MyCallback callback;
    public static MyCallback getIntence(){
        if (callback == null){
            synchronized (MyCallback.class){
                if (callback == null){
                    callback = new MyCallback();
                }
            }
        }
        return callback;
    }

    private ChatLayout.OnAddMemberCallBack onAddMemberCallBack;
    public void setOnAddMemberCallBack(ChatLayout.OnAddMemberCallBack onAddMemberCallBack){
        this.onAddMemberCallBack = onAddMemberCallBack;
    }

    public ChatLayout.OnAddMemberCallBack getOnAddMemberCallBack(){
        return onAddMemberCallBack;
    }

}

第二步:其次在副模块儿的ChatLayout中写一个setCallBack的方法,在主模块儿的ChatFragment中调用此方法并实现具体跳转代码。这里利用单例来存储数据CallBack对象。

public void setOnAddMemberCallBack(OnAddMemberCallBack onAddMemberCallBack){
        MyCallback.getIntence().setOnAddMemberCallBack(onAddMemberCallBack);
    }
mChatLayout.setOnAddMemberCallBack(new ChatLayout.OnAddMemberCallBack() {
            @Override
            public void addMember(GroupInfo groupInfo) {
                Toast.makeText(getActivity(),"添加成员",Toast.LENGTH_LONG).show();
                Intent intent = new Intent(getActivity(), XXXXXXActivity.class);
                getActivity().startActivity(intent);
                getActivity().finish();
            }
        });

第三步:最后也就是只需要在TuiKit副模块儿原本添加的方法出调用MyCallBack单例拿到之前set的CallBack就可以了。

我也在网上找了很多资料,这方面相关内容不多,貌似有一个阿里的什么Gradle依赖库可以直接进行主副模块儿的互通。想了解的也可以去看看。

总结:就是利用主模块儿可以调用副模块儿内容,副模块儿不能调用主模块儿内容,将callback回调放在副模块儿中,作为两个模块儿之间的桥梁,来完成沟通跳转。

你可能感兴趣的:(个人小结,Android)