采用eventBus传递消息,Fragment多层的消息传递,fragment控制其他fragment的显示状态

       最近开发遇到一个问题,就是有一个tab(使用fragment实现的)控制了4个fragment页面,叫ABDC吧,在C中点击C的item进入一个Fragment  F,再点击F里面的一个控件就会退出当前的fragment F,并打开一个新的Fragment  G ,这个G它显示在 tab的Fragment的上层,此时,你发现可以点击tab,但是却对 G没有影响,不能对G有什么控制。

      而需求是需要点击tab要关闭G,但是tab和G是没有任何关系的。来看图

这时候就需要将tab的点击消息传递给里面的fragment了

首先创建一个接口 BaseTabChangeListener.java

public interface BaseTabChangeListener {
    void tabChange(int tag, TabBean tabBean);
}

然后在tab里面声明这个接口 BaseTabFragment.java

我的tab是抽象的,调用接口的方法

    public abstract int setIndexFragment();

    public BaseTabChangeListener tabChangeListener;

    public BaseTabChangeListener getTabChangeListener() {
        return tabChangeListener;
    }

    public void setTabChangeListener(BaseTabChangeListener tabChangeListener) {
        this.tabChangeListener = tabChangeListener;
    }


    public void onCLick(View v){
    //其他代码
    if (tabChangeListener != null) {
            tabChangeListener.tabChange(tag, TAB_BEANS.get(tag));
            //这里我传的是tab的状态改变的消息,需要传什么,自己定
       }
    //其他代码
    }

再新建一个TabChangeEvent.java

里面不需要啥东西,就是为了当中间传递的人的作用

public class TabChangeEvent {
}

 

在tab的实现类中实现接口的方法  LearningCenterFragment.java     extends BaseTabFragment

在该方法中我用EventBus给你需要传递参数的fragment进行传递参数

@Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        setTabChangeListener(this);//实现接口
        super.onCreate(savedInstanceState);
    }

@Override
    public void tabChange(int tag, TabBean tabBean) {
        EventBus.getDefault().post(new TabChangeEvent());
    }

在需要接收到该信息的fragment中写  AnswerResultFragment.java

@Subscribe(threadMode = ThreadMode.MAIN)
    public void onTabChange(TabChangeEvent tabChangeEvent) {
        //你要干的事情
    }

这样就可以在没有什么控制关系的fragment之间进行消息传递了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值