从ViewPager中删除或清除所有碎片

Jac*_*ern 4 android android-fragments android-viewpager android-pageradapter

我通过像这样的片段填充视图寻呼机

pagerAdapter = new PagerAdapter(getSupportFragmentManager());
        mViewPager = (ViewPager) findViewById(R.id.container);

        for (int i = 0; i < 10; i++) {
            newfragment fragobj = new newfragment();
            fragobj.setArguments(bundle);
            pagerAdapter.addFragment(fragobj, "Category");
        }

            mViewPager.setAdapter(pagerAdapter);
            mViewPager.setCurrentItem(page);
Run Code Online (Sandbox Code Playgroud)

我希望清除所有碎片并在清除后添加新碎片.如果我现在添加新的片段,它会使用旧片段进行广告.

我尝试了很多堆栈溢出的答案,但没有一个能为我工作.

Kat*_*hah 9

该片段已被删除并销毁.问题是观点.

只有这对我有用

myViewPager.setSaveFromParentEnabled(false);
Run Code Online (Sandbox Code Playgroud)

干杯!

  • 也为我工作!非常感谢 (2认同)

小智 6

在 ViewPagerAdapter 中添加这个方法,当你想从 viewPager 中清除片段时调用它

public void clear() {
    FragmentTransaction transaction = manager.beginTransaction();
    for (Fragment fragment : mFragmentList) {
        transaction.remove(fragment);
    }
    mFragmentList.clear();
    transaction.commitAllowingStateLoss();
}
Run Code Online (Sandbox Code Playgroud)


Zer*_*One 1

mViewPager :是您用来设置 Fragment 的视图

mViewPager = (YourViewPager) findViewById(R.id.myPager);
Run Code Online (Sandbox Code Playgroud)

表:只是我所有片段位置的整数列表

public void destroyAllItem() {
        int mPosition = mViewPager.getCurrentItem();
        int mPositionMax = mViewPager.getCurrentItem()+1;
        if (TABLE.size() > 0 && mPosition < TABLE.size()) {
            if (mPosition > 0) {
                mPosition--;
            }

            for (int i = mPosition; i < mPositionMax; i++) {
                try {
                    Object objectobject = this.instantiateItem(mViewPager, TABLE.get(i).intValue());
                    if (objectobject != null)
                        destroyItem(mViewPager, TABLE.get(i).intValue(), objectobject);
                } catch (Exception e) {
                    Log.i(TAG, "no more Fragment in FragmentPagerAdapter");
                }
            }
        }
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        super.destroyItem(container, position, object);

        if (position <= getCount()) {
            FragmentManager manager = ((Fragment) object).getFragmentManager();
            FragmentTransaction trans = manager.beginTransaction();
            trans.remove((Fragment) object);
            trans.commit();
        }
    }
Run Code Online (Sandbox Code Playgroud)