android - 如何跨Fragment使用notifyDataSetChanged()方法?
ringa_lee
ringa_lee 2017-04-17 15:03:29
[Android讨论组]

问题是这样的,我有3个Fragment构成一个TabLayout,分别称为Fragment A、B、C。
每个Fragment都由一个RecyclerView构成。

因为RecyclerView在Fragment主类里的OnClick()方法不能获取点击的Item里的位置,所以要在该Fragment的Adapter类中的ViewHolder中写OnClick()方法。

那么当我点击了Fragment C的一个item的时候,如何用notifySetChanged()通知Fragment A更新它的数据呢?

ringa_lee
ringa_lee

ringa_lee

全部回复(7)
怪我咯

分场合吧。

  1. Fragment多,采用事件总线Otto或者EventBus

  2. Fragment少,还要耦合轻点的,用Activity作为媒介接口;

  3. 不在乎耦合的,自订接口或者getTargetFragment() and setTargetFragment()

伊谢尔伦

点击C的时候在对应的activity里应该会有回调对不对,然后在那个回调方法里用A的实例执行对应的方法咯

黄舟

回调 或者设置个监听 在或者观察者 在或者通知他的主activity去刷新

伊谢尔伦

在c中构造一个getAdapter方法获取c中的的adapter,在A中获取c的实例 调用才c中的getAdapter方法 获取c的adapter 就可以执行notifySetChanged()方法

ringa_lee

1,实现自己的接口让activity调用,然后用activity去调用另一个fragment
2,广播,这里推荐local广播

ringa_lee

首先

Fragment主类里的OnClick()方法不能获取点击的Item里的位置
这里可以写一个接口出来,这样就可以在Fragment里设置点击事件,效果和ListView的类似,可以获得点击的item。

然后,这几个Fragment都寄生于同一个Activity,Fragment可以将事件传递给Activity,Activity再去让另一个Fragment里的Adapter执行Notifify。


还可以使用EventBus来进行消息的传递,感觉上会比广播简单一些,
再或者,可以在CFragment里去获得AFragment的对象,直接进行操作,也是通过Activity进行传递的。

但是有个疑问,ViewPager默认是加载左右2个Fragment的,那么CFragment显示出来的时候,A应该是被回收掉的,那A再显示出来的时候,A的数据应该是最新的了呀,也就不需要Notify了

伊谢尔伦

EventBus,Otto值得你拥有

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号