简体   繁体   English

更新适配器后如何在ViewPager中更新片段?

[英]How to update Fragments in ViewPager after updating Adapter?

I call loadCategory method from different items of navigation drawer. 我从导航抽屉的不同项目调用loadCategory方法。 On the first call ViewPager load the correct data. 在第一次调用ViewPager加载正确的数据。 But on the second call data doesn't change. 但是在第二次通话中,数据不会更改。 ViewPager shows the old data, Please help. ViewPager显示旧数据,请帮助。

Thanks in advance. 提前致谢。

    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());

There are several ways to update 有几种更新方式

When using FragmentPagerAdapter or FragmentStatePagerAdapter , 使用FragmentPagerAdapterFragmentStatePagerAdapter

if you want to switch out the actual fragments that are being displayed, you need to avoid FragmentPagerAdapter and use FragmentStatePagerAdapter. 如果要切换出正在显示的实际片段,则需要避免FragmentPagerAdapter并使用FragmentStatePagerAdapter。

check this link for more information. 检查此链接以获取更多信息。 Update ViewPager 更新ViewPager

Override getItemPosition in your PagerAdapter 在您的PagerAdapter中覆盖getItemPosition

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

second way to update viewpager 更新viewpager的第二种方法

You might need to removeView and addView to reload your viewpager to get new changes in your loadCategory function after updating adapter. 您可能需要removeView和addView来重新加载viewpager,以便在更新适配器后在loadCategory函数中获得新的更改。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM