在单个片段中处理后退按钮 [英] handle back button in single fragment
问题描述
我有一个带有导航抽屉的应用程序.当我启动该应用程序时,我在主屏幕(屏幕A)上显示的是"hello world",然后当我从导航抽屉中选择一个项目时,我会加载一个片段并获取"new hello world",然后当我选择一个从导航抽屉中的项目,我加载一个片段并获取你好,宇宙".但是由于所有这些都是通过1个单个片段发生的,所以当我按下设备后退按钮时,我应该获得如下所示的先前片段:
I have an application with navigation drawer. when i start the application, what i have on main screen (screen A) is "hello world" and then when i select an item from navigation drawer, i load a fragment and get "new hello world" and then again when i select an item from navigation drawer, i load a fragment and get "hello universe". But since this is all happening via 1 single fragment, when i press the device back button i should get previous fragment like below:
你好宇宙">按回退>新你好世界">按回退>你好世界"
"hello universe" >press back> "new hello world" >press back> "hello world"
我该如何处理?
注意:
NOTE:
在更改我尝试过的片段时
while changing the fragment i have tried
fragmentManager.beginTransaction().replace(R.id.mainContent, fragment).commit();
然后我更改为:
fragmentManager.beginTransaction().add(R.id.mainContent, fragment).addToBackStack("tag").commit();
,但没有任何效果.按下后退按钮后,应用程序退出. 是因为同一片段一次又一次地被另一个内容替换了吗?
but nothing worked. The app exits on back button press. Is it due to the same fragment getting replaced by another content again and again?
推荐答案
您尝试的第二种方法是正确的.尝试通过覆盖onBackPressed()
方法在BackPressed()
上调用popBackStack()
.
The second approach you tried is correct.Try to call popBackStack()
on BackPressed()
by overriding onBackPressed()
method.
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else if (getFragmentManager().getBackStackEntryCount() == 0) {
super.onBackPressed();
}
}
这篇关于在单个片段中处理后退按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!