我面临的场景是在我的应用程序中,我有一个单窗格和双窗格样式布局。对于每种不同样式的布局,我没有单独处理屏幕之间可能的每一个导航操作,而是使用一个函数,它可以在给定所需屏幕时正确设置布局。
它基本上是switch
应用程序中每个屏幕的语句,每个屏幕中都有一个嵌套switch
语句来处理每种布局样式。这就是我在代码中所说的:
protected void setupScreen() {
switch(currentScreen) {
case SCREEN_ONE:
switch(currentLayout) {
case SINGLE_PANE:
// Perform actions to setup the screen
break;
case DUAL_PANE:
// Perform actions to setup the screen
break;
}
break;
case SCREEN_TWO:
switch(currentLayout) {
case SINGLE_PANE:
// Perform actions to setup the screen
break;
case DUAL_PANE:
// Perform actions to setup the screen
break;
}
break
// ... etc ....
}
}
在我要执行设置屏幕操作的部分中,这包括以下三个基本操作:
// Create the fragments if necessary
if (screenFragment == null) {
screenFragment = new myFragment();
}
// Remove the existing fragments from the layout views
// HOW???
// Add the fragments for this screen to the view
getSupportFragmentManager().beginTransaction().add(pane1.getId(), myFragment, "myFragment").commit();
如您所见,我正在努力的是如何进行第二步。在不确切知道要删除哪些的情况下,如何从给定中删除所有Fragment
s ?View
我发现的最接近的是FragmentTransaction.replace()
它确实为每种情况都成功地做到了这一点,但事实证明你正在用Fragment
相同的片段替换 a 。在这种情况下,它不会全部删除,然后添加(如文档建议的那样),它似乎只是删除了。这是使用兼容性库的问题还是不FragmentTransaction.replace()
应该使用的方式?
无论如何,我应该怎么做呢?我是否必须编写一个removeAllFragments()
函数来遍历每个片段并将其分离,或者有没有办法完成“二合一”FragmentTransaction.replace()
函数声称要做的前半部分?