public class MyViewPagerAdapter extends FragmentStatePagerAdapter {
Context context;
private ViewPager viewPager;
//пример с TabLayout, но можно и без него, конечно
private TabLayout tabLayout;
private final ArrayList<Fragment> fragmentList = new ArrayList<>();
public MyViewPagerAdapter(FragmentManager manager, Context context, ViewPager viewPager,
TabLayout tabLayout) {
super(manager);
this.context = context;
this.viewPager = viewPager;
this.tabLayout = tabLayout;
}
...
public void addFragment(Fragment fragment) {
/*
* добавляем фрагмент в список
* нужно для override-функций
* getItem() и getCount()
*/
fragmentList.add(fragment);
//не забываем обновить состояние ViewPager'a
notifyDataSetChanged();
}
public void removeFragment(int position) {
//удаляем tab по позиции
removeTab(position);
//удаляем сам фрагмент из списка и...
Fragment fragment = fragmentList.get(position);
fragmentList.remove(fragment);
//удаляем экземпляр фрагмента
destroyItem(viewPager, position, fragment);
//не забываем обновить состояние ViewPager'a
notifyDataSetChanged();
}
private void removeTab(int position) {
if (tabLayout.getChildCount() > 0) {
tabLayout.removeTabAt(position);
}
}
}
destroyItem()- 方法 from FragmentStatePagerAdapter,删除片段实例。
现在很简单。ViewPage在任何类中,我们都会以某种方式获得要替换的当前片段的位置。例如这样的:
int currentTabPosition = viewPager.getCurrentItem();
如果我正确理解您的问题,这很容易:
假设您有
MyViewPagerAdapter一个用于 的适配器ViewPager,它具有函数addFragment()和removeFragment(),并扩展了类FragmentStatePagerAdapter,因为 您使用片段(我省略了覆盖函数,您可以在此处查看此类适配器的示例):destroyItem()- 方法 fromFragmentStatePagerAdapter,删除片段实例。现在很简单。
ViewPage在任何类中,我们都会以某种方式获得要替换的当前片段的位置。例如这样的:我们得到适配器
ViewPage并调用:我们得到一个新的片段:
并将其添加到适配器: