我正在尝试从 FragmentStateAdapter 添加或删除片段,但它不起作用。 这是我的初始化部分:
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(), getLifecycle());
mViewPager = findViewById(R.id.viewpager);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.setOffscreenPageLimit(mSectionsPagerAdapter.getItemCount()-1);
new TabLayoutMediator(tabLayout, mViewPager,
(tab, position) -> tab.setText(categorias.get(position))
).attach();
我的SectionsPagerAdapter类:
private class SectionsPagerAdapter extends FragmentStateAdapter {
private final List<Fragment> mFragments = new ArrayList<>();
void addFragment(String title, Fragment fragment) {
categorias.add(0, title);
mFragments.add(0, fragment);
new TabLayoutMediator(tabLayout, mViewPager,
(tab, position) -> tab.setText(categorias.get(position))
).attach();
notifyItemInserted(0);
}
void removeFragment() {
tabLayout.removeTabAt(0);
categorias.remove(0);
mFragments.remove(0);
notifyItemRemoved(0);
}
public
SectionsPagerAdapter(FragmentManager fm, Lifecycle lifecycle) {
super(fm, lifecycle);
categorias = new ArrayList<>();
if(!prefsPor.getAll().isEmpty()) {
categorias.add(getString(R.string.fav_tab));
mFragments.add(Favoritos.newInstance(fecha));
favsCount = prefsPor.getAll().size();
}
categorias.add(getString(R.string.first_tab));
mFragments.add(General.newInstance(fecha));
categorias.add(getString(R.string.second_tab));
mFragments.add(Deportes.newInstance(fecha));
categorias.add(getString(R.string.third_tab));
mFragments.add(Economia.newInstance(fecha));
categorias.add(getString(R.string.fourth_tab));
mFragments.add(Locales.newInstance(fecha));
categorias.add(getString(R.string.fifth_tab));
mFragments.add(Internacional.newInstance(fecha));
}
@NonNull
@Override
public Fragment createFragment(int position) {
return mFragments.get(position);
}
@Override
public int getItemCount() {
return categorias.size();
}
}
当我调用 addFragment 方法时,它会抛出一个错误,指出 Fragment 已添加。对于removeFragment,它显示IndexOutOfBoundException。
为了添加片段,我这样做:
mSectionsPagerAdapter.addFragment(getString(R.string.fav_tab), Favoritos.newInstance(fecha));
我正在尝试从视图寻呼机动态添加片段
这是因为第一次你的适配器列表是空的并且你调用了 mSectionsPagerAdapter.getItemCount()-1 ,这意味着 -> 0 - 1 = -1 ,那就是 为什么会出现越界异常.