如何在片段中使用EventBus?

时间:2018-07-26 07:09:45

标签: java android android-fragments event-bus

在我的应用程序中,我在fragment中使用Activity,并且想在fragment中运行一个代码时,在Activity中调用一些代码。

我写了以下代码,但是当加载数据未运行activity代码时!

片段代码:

    public void loadRecentPosts() {
        ApiUtils.getApiInterface().getRecentPosts(AppConstant.DEFAULT_PAGE).enqueue(new Callback<List<Post>>() {
            @Override
            public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
                if (response.isSuccessful()) {

                    if (!recentPostList.isEmpty()) {
                        recentPostList.clear();
                    }
                    recentPostList.addAll(response.body());
                    if (recentPostList.size() > 0) {
                        recentPostAdapter.notifyDataSetChanged();
                        EventBus.getDefault().post(new LoadMainDataEvent());
                    }
                } else {
                    showEmptyView();
                }
                pbSectionLoader.setVisibility(View.GONE);
            }

            @Override
            public void onFailure(Call<List<Post>> call, Throwable t) {
                showEmptyView();
                t.printStackTrace();
            }
        });
    }
}

活动代码:

@Subscribe (threadMode = ThreadMode.MAIN)
public void onLoadMainDataEvent(LoadMainDataEvent loadMainDataEvent){
    Toast.makeText(activity, "OK", Toast.LENGTH_SHORT).show();
}

我想要从服务器获取数据到fragment时,在activity页面中运行代码。

我该如何解决?请帮我。谢谢

1 个答案:

答案 0 :(得分:0)

尝试一下就可以了

FragmentClass.java

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    if (!EventBus.getDefault().isRegistered(this)) {
        EventBus.getDefault().register(this);
     }
}

@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageBusEvent event) {
}

@Override
public void onDestroy() {
        //unregister event bus
        EventBus.getDefault().unregister(this);
        super.onDestroy();
}