最近开发遇到一个问题,就是有一个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之间进行消息传递了