我可以接受Bus by Fragment的活动吗?

时间:2017-03-26 13:38:18

标签: android event-bus

我使用的是Otto EventBus。我有一个RecyclerViewAdapter,我在点击项目时使用Bus.post方法,问题是我有一个recylcer视图的片段不接受事件,所以当点击项目时我没有反应,我在Activity中注册Bus替换片段和Activity成功接受事件,但是片段 - 不,所以我可以为监听事件注册片段,还是应该使用回调?

BusProvider类:

 public final class BusProvider {

    private static final Bus BUS = new Bus();

    public static Bus getInstance() {
        return BUS;
    }

    private BusProvider(){}
}

ViewHolderOnClick代码

public void onClick(View v) {
                    transfers.remove(getAdapterPosition());
                    notifyItemRemoved(getAdapterPosition());
                    BusProvider.getInstance().post(new OnButtonDeleteClickEvent(transfers.isEmpty(), id));
                    break;
}

片段订阅方法

@Subscribe
    public void onButtonDeleteClick(OnButtonDeleteClickEvent event) {
        db.deleteTransfer(event.getId());
        if (event.isListEmpty()) {
            setVisibility(false);
        }
        CustomToast toast = new CustomToast(getActivity(), getString(R.string.successfully_deleted));
        toast.show();
    }

我正在使用正确的@Subscribe,当我在活动中使用它时,事件有效

1 个答案:

答案 0 :(得分:0)

确保调用事件总线的register方法。请查看以下代码段以获取init并取消EventBus订阅。

我在创建View时订阅EventBus,因为我只有在我的UI可见时才有兴趣收听消息/事件。所以我利用了onViewCreated的{​​{1}}方法。

fragment

当UI不再可见时,不要忘记删除订阅。

   @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    EventBus.getDefault().register(this);
   }