在ViewPager中替换片段,旧片段不会删除

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

我试图从ViewPager替换片段,我不知道最好的方法来做到这一点。

为了更改片段我使用此代码:

   Fragment productDetailFragment = RetarFragment.newInstance(null, null);
    FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
    transaction.replace(R.id.root_frame, productDetailFragment).commit();

其中R.id.root_frame是我将替换的片段的容器,它是FrameLayout。

问题在于,当我运行应用程序时,片段运行良好,但它位于旧片段上,应删除。

有没有更好的解决方案呢?

ViewPager的适配器是FragmentStatePagerAdapter

public class SectionsPagerAdapter extends FragmentStatePagerAdapter implements Serializable{


    public static final int MENU_RETAR = 2;
    public static final int MENU_BATALLA = 1;
    int MENU_ACTUAL = MENU_BATALLA;

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a PlaceholderFragment (defined as a static inner class below).
        switch (position){
            case 0: return new TimelineFragment();
            case 1: return new SearchFragment();
            case 2:

                if(MENU_ACTUAL == MENU_RETAR){
                    return new RetarFragment();
                }else{
                    return new MenuBatallaFragment();
                }

            case 3: return new NotificacionesFragment();
            case 4: return new PerfilFragment().newInstance(this);
            default:
                return new TimelineFragment();
        }
    }



    @Override
    public int getItemPosition(Object object) {

        return POSITION_NONE;
    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 5;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return null;
            case 1:
                return null;
            case 2:
                return null;
            case 3:
                return null;
            case 4:
                return null;
        }
        return null;
    }
}
android android-fragments
2个回答
0
投票

首先,您需要添加具有唯一标记的片段。然后,只要您想要删除旧片段替换,您需要删除具有该唯一片段标记的片段。

删除片段;

Fragment fragment =getSupportFragmentManager().findFragmentByTag(TAG); 

if(fragment != null)   
    getSupportFragmentManager().beginTransaction().remove(fragment).commit();

0
投票

解决了

如果你在新片段的布局中设置了一个背景并且clickable =“true”它就会正确运行!

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