解决 ViewPage setAdapter()不更新数据的bug

Posted 薛萌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决 ViewPage setAdapter()不更新数据的bug相关的知识,希望对你有一定的参考价值。

public class HomeAdapter extends FragmentPagerAdapter 

    List<IndexDataEntity.DataBean.MorenBean> morenBeanList;
    private FragmentManager fm;

    public HomeAdapter(FragmentManager fm, List<IndexDataEntity.DataBean.MorenBean> morenBeanList) 
        super(fm);
        this.fm = fm;
        this.morenBeanList = morenBeanList;
    

    @Override
    public HomePageFragment getItem(int position) 
        return HomePageFragment.newInstance(Integer.parseInt(morenBeanList.get(position).getId()), Integer.valueOf(morenBeanList.get(position).getParametertype()));
    

    @Override
    public int getCount() 
        return morenBeanList.size();
    

    @Override
    public CharSequence getPageTitle(int position) 
        return morenBeanList.get(position).getParametername();
    


    /**
     * 重写FragmentPagerAdapter里边的方法,如果fragment存在的话会调用缓存里边的fragment
     * 从而导致数据不更新问题
     *
     * @param container
     * @param position
     * @return
     */
    public Object instantiateItem(ViewGroup container, int position) 
        //拿到缓存的fragment,如果没有缓存的,就新建一个,新建发生在fragment的第一次初始化时
        HomePageFragment f = (HomePageFragment) super.instantiateItem(container, position);
        String fragmentTag = f.getTag();
        if (f != getItem(position)) 
            //如果是新建的fragment,f 就和getItem(position)是同一个fragment,否则进入下面
            FragmentTransaction ft = fm.beginTransaction();
            //移除旧的fragment
            ft.remove(f);
            //换成新的fragment
            f = getItem(position);
            //添加新fragment时必须用前面获得的tag
            ft.add(container.getId(), f, fragmentTag);
            ft.attach(f);
            ft.commitAllowingStateLoss();
        
        return f;
    


 

以上是关于解决 ViewPage setAdapter()不更新数据的bug的主要内容,如果未能解决你的问题,请参考以下文章

Android中Scrollview嵌套viewpage问题:viewpage设置非固定高点,按照自定义的scrollview 还是不能解决.

ViewPage2使用及坑点解决

android-数据在viewPage中丢失

setAdapter“调用需要 API 级别 11(当前最低为 8):android.widget.AbsListView#setAdapter”?

ViewPage第二课为ViewPage加入标题

Adnroid ViewPage 使用