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) {

        // 处理消息

        }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。