Android关于ViewPager+Fragment缓存问题

Android关于ViewPager+Fragment缓存问题

场景需求

在ViewPager里根据后台返回,动态New添加N个同类型Fragment碎片对象

出现问题

第一次添加N个Fragment并赋值,没有任何问题。
第二次切换新的N个Fragment并赋值,出现赋值了之后,Fragment中还是之前赋值的参数。

问题解决

ViewPager.FragmentPagerAdapter 重写回调方法:getItemId

mBinding.vpager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager(), BEHAVIOR_SET_USER_VISIBLE_HINT){
            @NonNull
            @Override
            public CustomFragment getItem(int position) {
                return fragmentList.get(position);
            }

            @Override
            public int getCount() {
                return fragmentList.size();
            }

            //重写该回调方法即可解决
            @Override
            public long getItemId(int position) {
                return getItem(position).hashCode();
            }

            @Nullable
            @Override
            public CharSequence getPageTitle(int position) {
                return getItem(position).initTitle();
            }
        });

原理

getItemId 在ViewPager中作为区分缓存对象的条件

在debug的过程中,可以发现如果不重写getItemId方法,第二次添加新的Fragment并赋值的时候,赋值对象的hashCode一直跟第一次一样。

你可能感兴趣的:(Android-UI,android)