我遇到的场景是在我的应用程序中,我有一个单 Pane 和一个双 Pane 样式布局。对于每种不同的布局样式,我使用的功能不是在屏幕之间单独处理每个导航操作,而是在给定所需的屏幕时正确设置布局。
它基本上是应用程序中每个屏幕的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
的情况下从给定的View
删除所有FragmentTransaction.replace()
?我发现的最接近的是Fragment
,它可以在每种情况下成功完成但可以成功完成此操作,但事实证明您要用相同的 fragment 替换FragmentTransaction.replace()
。在这种情况下,它不会删除所有内容,而是添加(就像文档中所建议的那样),只是删除了它。这是使用兼容性库的问题吗?还是不应该使用removeAllFragments()
的方式?无论如何,我应该怎么做呢?我是否必须编写一个
FragmentTransaction.replace()
函数以遍历每个 fragment 并将其分离,或者是否有办法完成ojit_code函数“二合一”的上半部分? 最佳答案
典型的机制是使用 FragmentManager.findFragmentByTag()
。您可以使用它并在 fragment 中添加标签(或ID的替代物)。这样,您可以确定当前正在管理哪些 fragment 。然后,一旦您拥有当前 fragment 的句柄(findFragmentByTag返回非空),就可以使用 FragmentManager.beginTransaction()
启动FragmentTransaction并删除/添加必要的 fragment 。以这种方式工作将使您避免要保留的 fragment 的“重新添加”过程。
我可能会做的是这样的代码:(警告伪代码)
Fragment pane1 = FragmentManager.findFragmentByTag("myFragmentPane1");
Fragment pane2 = FragmentManager.findFragmentByTag("myFragmentPane2");
setupScreen(pane1, pane2);
您还应该考虑类(class)的子类(class),而不是“将所有内容都放在一个类(class)中”。您有一个很明显的马丁·福勒(Martin Fowler)的Replace Conditional with Subclass案例。否则,我担心添加另一个屏幕时,这将很难管理。
关于android - fragment : Remove all fragments in a view,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14764043/