更新适配器后如何更新ViewPager中的碎片?

时间:2016-01-08 12:11:54

标签: android android-studio android-fragments android-viewpager android-pageradapter

我从导航抽屉的不同项目中调用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;
    }
}

3 个答案:

答案 0 :(得分:2)

如果你在片段内,你应该像这样实例化适配器

      adapter = new PagerAdapter(getChildFragmentManager());

答案 1 :(得分:2)

有几种方法可以更新

使用FragmentPagerAdapterFragmentStatePagerAdapter时,

  

如果你想切换出正在存在的实际片段   显示,你需要避免FragmentPagerAdapter并使用   FragmentStatePagerAdapter。

查看此链接以获取更多信息。Update ViewPager

  

在PagerAdapter中覆盖getItemPosition

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

second way to update viewpager

答案 2 :(得分:1)

您可能需要删除View和addView以重新加载viewpager,以便在更新适配器后在loadCategory函数中获取新的更改。

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