Android FragmentPagerAdapter 更新数据

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

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)方法等等,有效虽有效,但比较粗爆。ide

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

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

@Override
public long getItemId(int position) {
    // 获取当前数据的hashCode
    int hashCode = mData.get(position).hashCode();
    return hashCode;
}
相关文章
相关标签/搜索