ViewPager2 FragmentStateAdapter 在添加/删除片段时不更新

问题描述 投票:0回答:1

我正在尝试从 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));

我正在尝试从视图寻呼机动态添加片段

java android
1个回答
0
投票

这是因为第一次你的适配器列表是空的并且你调用了 mSectionsPagerAdapter.getItemCount()-1 ,这意味着 -> 0 - 1 = -1 ,那就是 为什么会出现越界异常.

© www.soinside.com 2019 - 2024. All rights reserved.