fragment复用至EventBus多次调用

在使用EventBus的MVP项目中,发现Fragment复用导致内容混乱,原本请求并显示不同数据的Fragment在多次滑动后显示相同内容。经过调试,发现并非Fragment复用或单例模式的问题,而是每个Fragment都注册了EventBus,从而接收到所有消息。解决方案是在注册EventBus时添加标识符,区分不同Fragment,确保正确刷新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目是mvp模式开发的,中间有一个tablayout,每个标签都是fragment复用,通过model请求不同数据展示,发现一个问题,多次滑动之后,每个fragment最后都显示同一个内容,看起来好像fragment复用有问题,每次取得是同一个fragment。debug之后发现请求没问题,确实是请求的不同数据。
一开始觉得是复用单例写的有问题,怎么改都不行。后来发现是EventBus的问题。

 /**
     * 事件响应方法
     * 接收消息
     *
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEvent(AdapterEvent event) {
       //......
    }

eventbus是通过不同的自定义Event类去接受消息的,而因为fragment是复用的,所以在每个fragment里都注册了消息接受EventBus.getDefault().register(this);所以每个fragment单例都会收到订阅的消息,最后的结果就是,每个fragment都会被刷新。
问题发现了就好处理了,加个标签标识不同fragment就行

 /**
     * 事件响应方法
     * 接收消息
     *
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEvent(AdapterEvent event) {
        if (event.getWhich() == which) {
           //......
        }
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值