FragmentTransaction替换不起作用

Gho*_*fel 4 android android-fragments

我已经在stackoverflow上搜索了这个问题并找到了这两个解决方案:

用活动组内的另一个片段替换片段
片段添加或替换不起作用

但是我的代码似乎是正确的,你可以在下面查看,我的代码的评论是在Portugues(巴西):

这是我的类MenuItemReceiver(是的,我使用BroadcastReceiver来显示我的片段),这已经可以显示我的片段内容但是当我尝试替换它时,旧片段会保留,新片段会出现在旧片段之上.

    public void onReceive(Context context, Intent intent) {
        //Fragment que será carregado, este fragment foi repassado pelo SlideMenuAdapter ao ter um item clicado
        Serializable serializableExtra = intent.getSerializableExtra(CustomFragment.CUSTOM_FRAGMENT);
        //Cast para CustomFragment uma vez que devemos recupera-lo como Serializable, poderia ter dado cast direto, mas decidi manter assim para melhor entendimento do código
        CustomFragment fragment =  (CustomFragment) serializableExtra;
        FragmentTransaction ft = slideMenuActivity.getSupportFragmentManager().beginTransaction();//Informa que estamos inicando uma transação nova
        ft.replace(R.id.dashboard,fragment);
        ft.addToBackStack(null);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        ft.commit();
        //Aplicamos as alterações permitindo que o estado do fragment seja perdido posteriormente, utilizamos o StateLoss para otimizar 
        //o gerenciamento de memória e garantir que nenhum fragment fique para traz porem sem possibilitado de ser "revisitado"
        slideMenuActivity.toggle();//Aqui simplesmente estamos escondendo o menu
    }
Run Code Online (Sandbox Code Playgroud)

我也试过这个代码并没有区别:

    public void onReceive(Context context, Intent intent) {
        Serializable serializableExtra = intent.getSerializableExtra(CustomFragment.CUSTOM_FRAGMENT);
        CustomFragment fragment =  (CustomFragment) serializableExtra;
        Fragment oldFragment = slideMenuActivity.getSupportFragmentManager().findFragmentById(R.id.dashboard);
        FragmentTransaction ft;
        if(oldFragment!=null){
            ft = slideMenuActivity.getSupportFragmentManager().beginTransaction();
            ft.remove(oldFragment);
            ft.commit();
        }
        ft = slideMenuActivity.getSupportFragmentManager().beginTransaction();ft.add(R.id.dashboard,fragment);
        ft.addToBackStack(null);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        ft.commit();
        slideMenuActivity.toggle();
    }
Run Code Online (Sandbox Code Playgroud)

在这里,您可以看到我的仪表板布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dashboard"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white" >

</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

emz*_*zet 6

请考虑fragmentTransaction.replace(在撰写本文时)错误 - 请参阅https://code.google.com/p/android/issues/detail?id=24674.

你现在能做的是

  • 解决问题(在提供的链接)和
  • 想出一个解决方法,直到Google修复它.

我的解决方法是手动删除所有相关的片段(借助fragmentManager.getFragments())并正常添加新片段fragmentTransaction.add.

  • 还是打破了'com.android.support:support-v4:21.0.0' (2认同)