Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
手动访问Android后台堆栈_Android_Android Fragments - Fatal编程技术网

手动访问Android后台堆栈

手动访问Android后台堆栈,android,android-fragments,Android,Android Fragments,我很难想出解决这个问题的办法 基本上,我的操作栏中有很多标签。触摸每个选项卡时,将分离上一个选项卡中的片段,并使用replace(如果尚未实例化)或attached(如果已实例化)添加新选项卡的片段。我想我是从谷歌那里得到这个方法的,到现在为止它一直运作良好 添加选项卡片段的示例: if(tab.getText().equals(context.getString(R.string.title_class_tab))) { if(browser == null)

我很难想出解决这个问题的办法

基本上,我的操作栏中有很多标签。触摸每个选项卡时,将分离上一个选项卡中的片段,并使用replace(如果尚未实例化)或attached(如果已实例化)添加新选项卡的片段。我想我是从谷歌那里得到这个方法的,到现在为止它一直运作良好

添加选项卡片段的示例:

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()方法不仅可以删除事务,还可以执行事务。我想在用户离开时将其删除,在用户返回时将其放回原处

我想我可以使用“GetBackbackEntryAt”来获得此事务的“Back Stack条目”,但如果我不能在用户返回选项卡时删除它并将其放回原位,那就没有多大好处了

我能想到的唯一可能的解决方案是不使用back堆栈,而是重写onBackButtonPressed。从那以后,如果有必要的话,我可以做一个反向交易


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

不确定这是否符合解决方案的要求,但我最终没有将事务添加到后台堆栈,而是在用户刷卡或按后退时执行了一个新的事务。该事务只是在动画等方面与原始事务相反

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