通过接口

时间:2017-01-20 13:56:11

标签: java android android-fragments

我知道这个问题有很多类似的问题和答案,但我的问题略有不同。

我有四个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

但是我不确定我怎么做,因为我使用ViewPagerprivate 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]

2 个答案:

答案 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操作

参考:Observer pattern