我知道这个问题有很多类似的问题和答案,但我的问题略有不同。
我有四个Fragment
,每个BaseFragment
一个Fragment
。我想为每个Activity
添加一个监听器,以便当一个事件触发我的Fragment
时,所有public interface OnClearButtonListener {
boolean onClearButtonPressed();
}
都会收到通知。
我尝试通过声明一个界面:
BaseFragment
让我的抽象public abstract class BaseTabsFragment extends android.support.v4.app.Fragment implements OnClearButtonListener{
类来实现它:
Activity
我在private OnClearButtonListener clearButtonListener;
中添加了界面:
Activity
但现在我想我需要以某种方式" connect"这两个组件因此,当我从Fragment
拨打电话时,onClearButtonPressed()
将会运行TabLayout
但是我不确定我怎么做,因为我使用ViewPager
和private void setUpViewPager(ViewPager viewPager) {
adapter = new MyTabAdapter(getChildFragmentManager());
adapter.addFragment(TagsFragment.newInstance(), "TAGS");
adapter.addFragment(PeopleFragment.newInstance(), "PEOPLE");
adapter.addFragment(CompaniesFragment.newInstance(), "COMPANIES");
adapter.addFragment(JobsFragment.newInstance(), "JOBS");
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(3);
}
并且初始化代码是:
echo $array['result'][0][0]
答案 0 :(得分:2)
或者你可以为此目的使用greenrobot EventBus。
首先定义一个事件:
public class OnClearButtonEvent {
public final String message;
public OnClearButtonEvent(String message) {
this.message = message;
}
}
然后在活动中:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(OnClearButtonEvent event) {/* Do something */};
并在onStart和暂停中取消/注册eventbus接收器
并在baseFragment中:
EventBus.getDefault().post(new OnClearButtonEvent());
https://github.com/greenrobot/EventBus
如果使用RxJava,最好使用RxEventBus
答案 1 :(得分:1)
在您的活动中,您可以按照这样的列表
private List<OnClearButtonListener> clearables;
让每个Fragment实现该接口(通过父类或其他方式),当您添加到适配器时,需要将相同的实例添加到列表中。
BaseFragment f = TagsFragment.newInstance();
clearables.add(f);
adapter.addFragment(f, "TAGS");
f = PeopleFragment.newInstance();
...
当您点击该按钮时,循环该列表并调用onClearButtonPressed操作