首先谢谢你看这个。我有 4 个片段。一种是显示菜单的菜单片段。我有 2 个显示数据和图片列表的列表片段。第 4 个片段是细节片段。一切开始正常。
设置:
我单击它显示的列表按钮,菜单片段隐藏在它后面。
我单击列表片段中的一个条目,它使用一个接口来传递数据并显示详细信息片段。
一旦它将我带到应有的列表片段,我单击后退按钮。
我再次单击后退按钮,它会显示应有的菜单片段。
问题:
如果我再次单击列表按钮,则会显示列表,但菜单片段仍显示在其后面。
我假设它与后台堆栈有关,也许我没有正确使用它。任何帮助是极大的赞赏。如果有人能解释这个问题,那就太棒了。如果您希望我发布我的 conde 的任何部分,请告诉我,但我觉得我的问题与后台堆栈有关,这是我与后台堆栈混淆的代码部分。
private Fragment visible;
private Fragment mVisibleCached;
@Override
public void onBackPressed() {
super.onBackPressed();
visible = mVisibleCached;
}
. .
public void showFragment(int fragIn) {
final FragmentManager fm = getSupportFragmentManager();
final FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
if (visible != null) {
ft.hide(visible);
//ft.remove(visible);
mVisibleCached = visible;
ft.addToBackStack(null);
}
switch (fragIn) {
case 0:
menuFrag = ((MenuFragment) fm.findFragmentByTag(MenuFragment.TAG));
if (menuFrag == null) {
menuFrag = MenuFragment.newInstance();
ft.add(R.id.fragment_container, menuFrag, MenuFragment.TAG);
} else {
// ft.show(menuFrag);
//ft.add(R.id.fragment_container, menuFrag, MenuFragment.TAG);
if (!menuFrag.isVisible()) {
ft.show(menuFrag);
}
}
ft.addToBackStack(null);
visible = menuFrag;
break;
case 1:
programsFrag = ((ListFrag) fm.findFragmentByTag(PROGRAMS_TAG));
if (programsFrag == null) {
programsFrag = ListFrag.newInstance(false);
ft.add(R.id.fragment_container, programsFrag, PROGRAMS_TAG);
} else {
// ft.show(programsFrag);
//ft.add(R.id.fragment_container, programsFrag, PROGRAMS_TAG);
// ft.replace(R.id.fragment_container, programsFrag);
if (!programsFrag.isVisible()) {
ft.show(programsFrag);
}
}
ft.addToBackStack(null);
visible = programsFrag;
break;
case 2:
hostsFrag = ((ListFrag) fm.findFragmentByTag(HOSTS_TAG));
if (hostsFrag == null) {
hostsFrag = ListFrag.newInstance(true);
ft.add(R.id.fragment_container, hostsFrag, HOSTS_TAG);
} else {
// ft.show(hostsFrag);
//ft.add(R.id.fragment_container, hostsFrag, HOSTS_TAG);
// ft.replace(R.id.fragment_container, hostsFrag);
if (!hostsFrag.isVisible()) {
ft.show(hostsFrag);
}
}
ft.addToBackStack(null);
visible = hostsFrag;
break;
case 3:
detailsFrag = ((DetailsFrag) fm.findFragmentByTag(DetailsFrag.TAG));
if (detailsFrag == null) {
detailsFrag = DetailsFrag.newInstance();
ft.add(R.id.fragment_container, detailsFrag, DetailsFrag.TAG);
} else {
//ft.add(R.id.fragment_container, detailsFrag, DetailsFrag.TAG);
if (!detailsFrag.isVisible()) {
ft.show(detailsFrag);
}
}
ft.addToBackStack(null);
visible = detailsFrag;
break;
}
ft.commit();
}