【问题标题】:Manually Access Android Back Stack手动访问 Android Back Stack
【发布时间】:2013-02-19 21:15:24
【问题描述】:

我在想办法解决这个问题时遇到了问题。

基本上,我的 ActionBar 中有很多选项卡。当每个都被触摸时,前一个选项卡中的片段被分离,新选项卡的片段使用替换(如果它们还没有被实例化)或附加(如果它们有)添加。我想我是从 Google 那里得到这个方法的,直到现在它都运行良好。

添加标签片段的示例:

if(tab.getText().equals(context.getString(R.string.title_class_tab))) {         
        if(browser == null) {
            browser = CourseBrowserFragment.newInstance(false);
            fragmentTransaction.replace(leftContainerId, browser);
        } else {
            fragmentTransaction.attach(browser);
        }

        if(lessonViewer == null) {
            lessonViewer = LessonViewerFragment.newInstance(false);
            fragmentTransaction.replace(rightContainerId, lessonViewer);
        } else {
            fragmentTransaction.attach(lessonViewer);
        }
}

并删除:

if(tab.getText().equals(context.getString(R.string.title_class_tab))) {         
        if(browser != null) {
            fragmentTransaction.detach(browser);
        }
        if(lessonViewer != null) {
            fragmentTransaction.detach(lessonViewer);
        }
}

问题来自我需要其中一个选项卡的布局。基本上它就像 Gmail 应用程序。有两个片段(比如面板 A 和面板 B),当您按下按钮时,面板 A 滑出,面板 B 滑到面板 A 的旧位置,而新的第三个(面板 C)从右侧滑入。

我的工作正常,但现在我已将滑入 FragmentTransaction 添加到后退堆栈中,以便用户可以触摸后退按钮,面板 C 将滑出,面板 A 将返回。同样,就像 Gmail。

除非用户转到不同的选项卡,否则此事务仍在后台堆栈中,并且如果用户按回则执行。碎片最终出现在疯狂的地方。我需要做的是当用户导航到不同的选项卡时将其从后台堆栈中删除。有什么办法可以做到这一点吗? FragmentManager 似乎不允许您手动从后台堆栈中删除内容,并且使用 popBackStack() 方法不仅会删除事务,还会执行它。我想在用户离开时将其删除,并在用户返回时将其放回。

我认为我可以使用“getBackStackEntryAt”获取此事务的“返回堆栈条目”,但如果我不能将其删除并在用户返回选项卡时将其放回原位,那就不好了.

我能想到的唯一可能的解决方案是不使用返回堆栈,而是覆盖 onBackButtonPressed。如有必要,我可以从那里撤消交易。

感谢您的帮助,如果我语无伦次,请见谅。

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    不确定这是否可以作为解决方案,但我最终只是没有将事务添加到后台堆栈,而是在用户滑动或按下时执行新事务。交易只是用动画等与原始交易相反。

    我管理后退按钮的方式是,如果我在显示面板 C 的布局中,我将布尔值设置为 true。如果用户滑回面板 A 布局或导航离开,则布尔值设置为 false。然后我覆盖了 Activity 中的 onBackButtonPressed 方法,如果布尔值为真(即:我们在 Panel C 布局中),我运行反向事务,否则我只调用 super.onBackButtonPressed()(即:执行标准后退按钮行为) .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多