Android 片段保留背景
Android fragment remain background
- 我正在做一个带有多个选项卡的 Android 应用程序,比方说
有 2 个选项卡。一个选项卡是 "android.support.v4.app.Fragment"
包含一些文本字段和一个按钮,另一个是
"android.app.Fragment"同时是一个MapFragment。
- 问题是第一次点击会调用另一个
"android.support.v4.app.Fragment" 使用 cardview(也支持)和
它们可以通过某种层次结构在它们之间导航。
- 现在,如果先点击地图点击,稍后点击其他选项卡,然后
最后我单击按钮转到包含的框架
cardviews,我可以看到这些,但在后台我也看到了
MapFragment.
- 我不知道如何解决这个问题。我尝试使用替换、删除、
添加,popBackStack,...此外,我还尝试从
root查看片段的框架,但没有任何反应。
- 事实是我要把你的笔记本电脑扔出去 window。
提前致谢!
如果您正在使用 .addToBackStack("")
,请删除它。并在每次用户 .replace();
方法调用所有片段时调用片段。
好吧,我知道发生了什么事。这是由于与两个不同的片段管理器(FragmentManager
和 SupportFragmentManager
)一起工作。
根据您要删除或替换的片段类型(支持或正常),您必须使用一个或另一个片段管理器。
我创建了一个枚举来了解哪种片段处于活动状态(以便删除)以及哪种片段将开始(以便替换)。
或多或少我做了一个这样的函数:
private void manageFragment (FragmentEnum nextFragment) {
switch (activedFragment) {
case SUPPORT:
getSupportFragmentManager().beginTransaction().remove(fragmentSupport).commit();
break;
case NORMAL:
getFragmentManager().beginTransaction().remove(fragmentNormal).commit();
break;
}
activedFragment = nextFragment;
switch (nextFragment) {
case SUPPORT:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragmentSupport).commit();
break;
case NORMAL:
getFragmentManager().beginTransaction().replace(R.id.fragment_container, fragmentNormal).commit();
break;
}
}
- 我正在做一个带有多个选项卡的 Android 应用程序,比方说 有 2 个选项卡。一个选项卡是 "android.support.v4.app.Fragment" 包含一些文本字段和一个按钮,另一个是 "android.app.Fragment"同时是一个MapFragment。
- 问题是第一次点击会调用另一个 "android.support.v4.app.Fragment" 使用 cardview(也支持)和 它们可以通过某种层次结构在它们之间导航。
- 现在,如果先点击地图点击,稍后点击其他选项卡,然后 最后我单击按钮转到包含的框架 cardviews,我可以看到这些,但在后台我也看到了 MapFragment.
- 我不知道如何解决这个问题。我尝试使用替换、删除、 添加,popBackStack,...此外,我还尝试从 root查看片段的框架,但没有任何反应。
- 事实是我要把你的笔记本电脑扔出去 window。
提前致谢!
如果您正在使用 .addToBackStack("")
,请删除它。并在每次用户 .replace();
方法调用所有片段时调用片段。
好吧,我知道发生了什么事。这是由于与两个不同的片段管理器(FragmentManager
和 SupportFragmentManager
)一起工作。
根据您要删除或替换的片段类型(支持或正常),您必须使用一个或另一个片段管理器。
我创建了一个枚举来了解哪种片段处于活动状态(以便删除)以及哪种片段将开始(以便替换)。
或多或少我做了一个这样的函数:
private void manageFragment (FragmentEnum nextFragment) {
switch (activedFragment) {
case SUPPORT:
getSupportFragmentManager().beginTransaction().remove(fragmentSupport).commit();
break;
case NORMAL:
getFragmentManager().beginTransaction().remove(fragmentNormal).commit();
break;
}
activedFragment = nextFragment;
switch (nextFragment) {
case SUPPORT:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragmentSupport).commit();
break;
case NORMAL:
getFragmentManager().beginTransaction().replace(R.id.fragment_container, fragmentNormal).commit();
break;
}
}