我已经在stackoverflow上搜索过这个问题并找到了这两个解决方案:
将一个片段替换为活动组内的另一个片段 https://stackoverflow.com/questions/5658675/replacing-a-fragment-with-another-fragment-inside-activity-group
片段添加或替换不起作用 https://stackoverflow.com/questions/11619573/fragment-add-or-replace-not-working
但我的代码似乎是正确的,您可以在下面检查,我的代码的注释是葡萄牙语(巴西):
这是我的类 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
}
我也尝试过使用这段代码,但没有什么区别:
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();
}
在这里您可以看到我的仪表板布局:
<?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>