标签:
在使用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