【发布时间】:2017-11-14 05:42:47
【问题描述】:
我的应用包含一个空活动和几个片段。活动的onCreate 将activity_main.xml 中的空视图替换为包含一些按钮的MainFragment。每个按钮启动一个单独的片段,用户可以从一个片段导航到另一个片段,等等。
按下后退键时,当前片段正确地替换为前一个片段,直到您到达MainFragment。当用户从MainFragment 按下时,它会隐藏主要片段,您会看到主要活动的白色空白背景。但我现在想退出活动,因为这是明智的行为。
如果片段管理器中没有片段,我可以通过第二次从 onBackPressed 调用 super.onBackPressed() 来实现这一点。
@Override
public void onBackPressed() {
super.onBackPressed();
FragmentManager manager = getSupportFragmentManager();
List<Fragment> fragments = manager.getFragments();
if (fragments == null || fragments.size() == 0) {
Log.d(TAG, "No more fragments: exit");
super.onBackPressed();
}
}
这是可以接受的做法吗?它会在活动工作流程中产生任何问题吗?有没有更好/标准的方法来处理这种情况?
【问题讨论】:
-
PS:我曾经在activity_main.xml中而不是片段中拥有按钮列表,但随后触摸其他片段的空白区域会导致活动中按钮的点击事件。我必须在所有片段上使用
clickable=true以避免这种情况。我认为即使是初始屏幕也可以使用片段来解决这个问题。 -
删除第一个调用:super.onBackPressed();... 只在 if 语句中留下那个调用
标签: android android-fragments android-activity