我正在尝试替换 ViewPager 适配器中的 fragment ,但它似乎不起作用。也没有显示任何错误。当我调用 Replace(int, Fragment) 方法时,它什么也不做。你知道为什么它不起作用吗?
public class PagerAdapter extends FragmentPagerAdapter {
private Vector<Fragment> mFragments;
private Stack<Fragment> mHiddenFragments;
public PagerAdapter(FragmentManager fm) {
super(fm);
mFragments = new Vector<Fragment>();
mHiddenFragments = new Stack<Fragment>();
}
// here is the replacement method I'm using
public void replace(int index, Fragment fragment) {
mHiddenFragments.push(mFragments.get(index));
mFragments.set(index, fragment);
notifyDataSetChanged();
}
public void replace(int index) {
mFragments.set(index, mHiddenFragments.pop());
notifyDataSetChanged();
}
public void add(Fragment fragment) {
mFragments.add(fragment);
notifyDataSetChanged();
public void remove(int index) {
mFragments.remove(index);
notifyDataSetChanged();
}
}
编辑: 我无法开始工作的部分是删除 fragment 。看来我只能删除 ViewPager 中当前查看的 fragment 之后的 fragment 。
示例:假设我有 fragment 0 和 1 => mFragments.size() == 2
mPagerAdapter.add(new GenreListFragment());
mPagerAdapter.remove(1);
最佳答案
我最喜欢的解决方案是使用嵌套 fragment ,因为这让我可以完全控制它们。
您还可以查看此 Replace Fragment inside a ViewPager
编辑。 当您收到notifyDataSetChanged() 调用时,您还可以实现PagerAdapter 的抽象方法。
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
问候。
关于java - 替换 ViewPager fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20530786/