如何在更新Adapter后更新ViewPager中的Fragments



我从导航抽屉的不同项调用loadCategory方法。在第一次调用时,ViewPager加载正确的数据。但在第二次通话中,数据没有变化。ViewPager显示旧数据,请帮助。

提前谢谢。

    private void loadCategory(int id) {
          toolbar.setTitle(categoryList[id]);
          adapter = new PagerAdapter(getSupportFragmentManager());
          mViewPager.setAdapter(adapter);
          adapter.notifyDataSetChanged();
    }
    public class PagerAdapter extends FragmentPagerAdapter{
    public PagerAdapter(FragmentManager fm) {
        super(fm);
    }
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        super.destroyItem(container, position, object);
    }
    @Override
    public Fragment getItem(int position) {
        Bundle bundle = new Bundle();
        bundle.putString("shayari",currentShayaaris[position]);
        Fragment SFragment = new ShayariFragment();
        SFragment.setArguments(bundle);
        return SFragment;
    }
    @Override
    public int getCount() {
        return currentShayaaris.length;
    }
}

如果您在一个片段中,您应该像以下一样实例化适配器

      adapter = new PagerAdapter(getChildFragmentManager());

有几种方法可以更新

当使用FragmentPagerAdapterFragmentStatePagerAdapter时,

如果您想切换出正在显示时,您需要避免FragmentPagerAdapter并使用FragmentStatePagerAdapter。

有关详细信息,请查看此链接。更新ViewPager

覆盖PagerAdapter 中的getItemPosition

public int getItemPosition(Object object) {
    return POSITION_NONE;
}

更新viewpager 的第二种方法

您可能需要removeView和addView来重新加载您的viewpager,以便在更新适配器后对loadCategory函数进行新的更改。

        ViewGroup parent = (ViewGroup) mViewPager.getParent();
        if (parent != null) {
            parent.removeView(mViewPager);
            mViewPager.getAdapter().notifyDataSetChanged();
            parent.addView(mViewPager);
        }

最新更新