Fragment 复用时,EventBus的消息多次处理

例: 在ViewPager中加入两个AFragment  .

AFragment中的onStart() 和onStop()注册/反注册了EventBus;

onStart() -->  EventBus.getDefault().register(this)

onStop() --> EventBus.getDefault().unregister(this)



问题:

// 这样如果有消息发过来就会执行两次
@Subscriber(tag = EventType.DEFAULT_TAG, mode = ThreadMode.MAIN)

fun eventClickItem(goodsItem: GoodsItem) {

        // 处理消息

}



解决:

我们创建Fragment的时候

fun newInstance(jumpType: Int): ProductDeclaringFragment {

        val bundle = Bundle()

        // 这里携带个数据, 也可以加个Tag

        bundle.putInt(Constants.JUMP_TYPE, jumpType)

        val fragment = ProductDeclaringFragment()

        fragment.arguments = bundle

        return fragment

}


private var mJumpType =0

在Fragment中onCreateView方法里拿到传过来的数据

val bundle =arguments

mJumpType = bundle!!.getInt(Constants.JUMP_TYPE)

然后接受消息的地方改下就好了

@Subscriber(tag = EventType.DEFAULT_TAG, mode = ThreadMode.MAIN)

fun eventClickItem(goodsItem: GoodsItem) {

       if(mJumpType  == 0) {

        // 处理消息

        }

}

你可能感兴趣的:(Fragment 复用时,EventBus的消息多次处理)