android - ViewPager+Fragment,某个Fragment里面的一条数据发生变化,如何局部刷新这条数据
高洛峰
高洛峰 2017-04-17 17:42:05
[Android讨论组]

ViewPager+Fragment,某个Fragment里面的一条数据发生变化,如何局部刷新这条数据

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(4)
巴扎黑

ViewPager的item是Fragment时一般使用FragmentPagerAdapter作为Adapter, 而这个类在添加Fragment的时候会添加tag, 看FragmentPagerAdapter的源码中的instantiateItem()方法

@Override
public Object instantiateItem(ViewGroup container, int position) {
    // 省略
    if (fragment != null) {
        // 省略
    } else {
        // 省略部分代码
        // 下面这句就是添加Fragment的语句, 第三个参数就是指定Fragment的tag, 
        // 你可以利用这个tag获取到对应的Fragment实例, 有了实例就可以随意更新Fragment的视图了
        mCurTransaction.add(container.getId(), fragment,
                makeFragmentName(container.getId(), itemId));
    }
    // 省略
    return fragment;
}

这个tag是通过一个makeFragmentName()的私有方法获取, 不过只要把这个方法直接复制出来就可以了, 这个方法的参数viewId应该是ViewPager的id, itemId是adapter的getItemId()方法, 所以可以自己组装出tag, 获取到Fragment.
就这样.

ringa_lee

如果用的RecyclerView,使用Eventbus可以这样

mAdapter.getItem(event.position).setCommentCount(mAdapter.getItem(event.position).getCommentCount()+1);
mAdapter.notifyItemChanged(event.position);
ringa_lee

我也对这个问题萌币过一段时间,搜索一番也没找到太好的办法,pagerfragmentadapter好像也没有提供获取对应fragment的api。
我索引搞了个弱引用的list在adapter初始化fragment的时候给它加入了,然后重写adapter的onDestroyItem(大概是叫这个吧?记不清了)在这里移除list中对应条目。
得到fragment实例就可以随便操作了。

天蓬老师
  1. Fragment在前台时, 订阅一个事件(消息), 可以用LocalBroadcastManager / EventBus / otto / Rx 都是可以的

  2. Fragment切换后台时, 取消订阅, 该Fragment再次切换到前台时, 刷新下页面数据并重新订阅

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

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