1、问题
一个界面利用TabLayout和ViewPager实现,其中有3个Tab,如下图:
每个界面的展现都是一样的功能,但是有些数据是共同的(有可能是三个Tab都有这条数据,有可能有两个Tab有这条数据),现在需求是想要编辑或删除其中一个Tab中的一条数据,如果其他Tab有这条数据也更新或删除;
2、说明
如果只更新当前修改的Tab中的数据能简单搞定,但是需要修改多个Tab中的这条数据,暂时想到每次的成功回调后执行一次ViewPager的Adapter中的notifyDataSetChanged方法,这样虽然实现了,但是体验超级不好。于是我又想另寻出路,但是发现每个Tab中的这条数据的Position也是不一样的,而且这里的ViewPager是实现懒加载的方式,只有界面第一次显示给用户和手动请求才请求数据,然后做缓存,接着就卡在这里了。
3、解决方法
利用RxBus(EventBus也一样),在需要的时候注册事件,然后操作完成,post指定的事件。如下图,分别注册注册和修改事件
其中getPosByInfo() 方法是遍历当前列表所有数据,找到放回位置,否则返回-1,,如果返回值大于等于0说明存在,再进行更新列表。
我这里是根据唯一标识id来判断是否存在;
mPos是记录操作的位置,这是删除成功回调函数,删除成功post事件。
注:3个Fragment都需要注册监听