我从导航抽屉的不同项目中调用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;
}
}
答案 0 :(得分:2)
如果你在片段内,你应该像这样实例化适配器
adapter = new PagerAdapter(getChildFragmentManager());
答案 1 :(得分:2)
有几种方法可以更新
使用FragmentPagerAdapter
或FragmentStatePagerAdapter
时,
如果你想切换出正在存在的实际片段 显示,你需要避免FragmentPagerAdapter并使用 FragmentStatePagerAdapter。
查看此链接以获取更多信息。Update ViewPager
在PagerAdapter中覆盖getItemPosition
public int getItemPosition(Object object) {
return POSITION_NONE;
}
答案 2 :(得分:1)
您可能需要删除View和addView以重新加载viewpager,以便在更新适配器后在loadCategory函数中获取新的更改。
ViewGroup parent = (ViewGroup) mViewPager.getParent();
if (parent != null) {
parent.removeView(mViewPager);
mViewPager.getAdapter().notifyDataSetChanged();
parent.addView(mViewPager);
}