码迷,mamicode.com
首页 > 移动开发 > 详细

Android FragmentPagerAdapter 更新数据

时间:2015-11-16 21:18:57      阅读:446      评论:0      收藏:0      [点我收藏+]

标签:

在使用ViewPager+FragmentPagerAdapter时候,更新Fragment里数据是不起作用,FragmentPagerAdapter添加或减少Fragment时,前面的Fragment内容更新不起作用等等问题,有的做法是暴力删除fragment列表,如

List<Fragment> fragments = getSupportFragmentManager().getFragments();
for (int i = fragments.size() - 1; i >= 0; i--) {
    getSupportFragmentManager().beginTransaction().remove(fragments.get(0));
}

也有做法是重写FragmentPagerAdapter的instantiateItem(ViewGroup container, int position)方法等等,有效虽有效,但比较粗爆。

       FragmentPagerAdapter.getItem(int position)在更新时候不一定会被调用,所以Fragment更新是无效,来看看FragmentPagerAdapter的父类PagerAdapter中的代码instantiateItem

技术分享

FragmentPagerAdapter里在根据getItemId(int position)来判断当前position里Fragment是否存在,如果存在,则不会创建亦不会更新,那么要让FragmentPagerAdapter的更新生效,那在getItemId(int)里根据数据返回一个唯一的数据ID,当FragmentPagerAdapter更新时,数据ID改变了,那么Fragment就会调用getItem(int)去获取新Fragment,达到更新效果

@Override
public long getItemId(int position) {
    // 获取当前数据的hashCode
    int hashCode = mData.get(position).hashCode();
    return hashCode;
}


Android FragmentPagerAdapter 更新数据

标签:

原文地址:http://my.oschina.net/8048/blog/531070

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!