【问题标题】:BackStack broken when using ActionBarActivity & getSupportFragmentManager使用 ActionBarActivity 和 getSupportFragmentManager 时 BackStack 损坏
【发布时间】:2015-03-11 19:50:16
【问题描述】:

我的应用程序中有以下工作流程:

Activity 1(一个 ListView)-> Activity 2(一个加载 Fragment 的 ListView)-> Fragment 1 -> Fragment 2。

一切都很顺利,我可以前进到片段 2,然后按“后退”按钮向后遍历每一步。

有时我需要添加一个 ActionBar。由于代表谷歌的一些奇怪的编程,我必须扩展导入 android.support.v7.app.ActionBarActivity 的 ActionBarActivity,这需要我将所有片段管理器更改为“支持”导入 android.support.v4.app。片段管理器。

结果,我在整个工作流程中都有一个 ActionBar,但我只能前进到 Fragment 2。任何按下 Back 按钮,都会导致 Activity 1 出现,没有 BackStack。

那么,ActionBar 和 BackStack 的 Actions/Fragments 是不可能的,还是我的 BackStack 因其他原因而损坏?

任何帮助将不胜感激。

谢谢!

【问题讨论】:

  • 如果你需要支持api级别
  • 我的最低等级是 16,但我找不到任何其他方法来强制出现 ActionBar。我尝试了各种帖子中的各种 hack,但没有一个可以强制 ActionBar,所以我最终使用了 ActionBarActivity。

标签: android android-fragments android-actionbar fragment-backstack


【解决方案1】:

如果您正在使用诸如 add()、replace() 等 FragmentTransaction 调用,则在调用 commit() 之前调用 FragmentTransaction 上的 addToBackStack()。这将设置为使后退按钮可以按照您的预期与片段一起使用。

【讨论】:

    【解决方案2】:

    我解决了这个问题。显然,ActionBarActivity 不会调用通常的 onBackPressed(),也不能与其他各种 hack 一起使用。

    我发现,返回按钮只被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...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 2015-07-25
      • 2014-03-31
      • 2019-06-26
      • 1970-01-01
      相关资源
      最近更新 更多