使用 ActionBarActivity 和 getSupportFragmentManager 时 BackStack 损坏
BackStack broken when using ActionBarActivity & getSupportFragmentManager
我的应用程序中有以下工作流程:
Activity 1(一个 ListView)-> Activity 2(一个加载片段的 ListView)-> 片段 1 -> 片段 2.
一切都很顺利,我可以前进到片段 2,然后按“后退”按钮向后遍历每一步。
有时我需要添加一个 ActionBar。由于代表 google 的一些奇怪的编程,我必须扩展导入 android.support.v7.app.ActionBarActivity 的 ActionBarActivity,这需要我将所有片段管理器更改为 'support' 导入 android.support.v4.app.FragmentManager.
结果是,我的工作流程中有一个 ActionBar,但我只能前进到 Fragment 2。任何按“后退”按钮都会导致 Activity 1 出现,没有 BackStack .
那么,Actions/Fragments ActionBar 和 BackStack 是不可能的,还是我的 BackStack 因其他原因损坏?
如有任何帮助,我们将不胜感激。
谢谢!
如果您使用的是 FragmentTransaction 调用,如 add()、replace() 等,请在调用 commit() 之前对 FragmentTransaction 调用 addToBackStack()。这将进行设置,以便后退按钮将按照您的预期与片段一起使用。
我解决了这个问题。显然,ActionBarActivity 不会调用通常的 onBackPressed(),也不会与其他各种 hacks 一起使用。
我发现后退按钮仅由 onOptionsItemSelected() 捕获,例如:
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(id == android.R.id.home) {
// use popBackStack() and super.onBackPressed()
return true;
}
// check for other button presses...
}
我的应用程序中有以下工作流程:
Activity 1(一个 ListView)-> Activity 2(一个加载片段的 ListView)-> 片段 1 -> 片段 2.
一切都很顺利,我可以前进到片段 2,然后按“后退”按钮向后遍历每一步。
有时我需要添加一个 ActionBar。由于代表 google 的一些奇怪的编程,我必须扩展导入 android.support.v7.app.ActionBarActivity 的 ActionBarActivity,这需要我将所有片段管理器更改为 'support' 导入 android.support.v4.app.FragmentManager.
结果是,我的工作流程中有一个 ActionBar,但我只能前进到 Fragment 2。任何按“后退”按钮都会导致 Activity 1 出现,没有 BackStack .
那么,Actions/Fragments ActionBar 和 BackStack 是不可能的,还是我的 BackStack 因其他原因损坏?
如有任何帮助,我们将不胜感激。
谢谢!
如果您使用的是 FragmentTransaction 调用,如 add()、replace() 等,请在调用 commit() 之前对 FragmentTransaction 调用 addToBackStack()。这将进行设置,以便后退按钮将按照您的预期与片段一起使用。
我解决了这个问题。显然,ActionBarActivity 不会调用通常的 onBackPressed(),也不会与其他各种 hacks 一起使用。
我发现后退按钮仅由 onOptionsItemSelected() 捕获,例如:
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(id == android.R.id.home) {
// use popBackStack() and super.onBackPressed()
return true;
}
// check for other button presses...
}