我遇到了解決此問題的問題。手動訪問Android後退堆棧
基本上我在我的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時,面板A滑出,面板B滑動到面板A的舊位置,而新的第三個面板(面板C)從右側滑入。
我有這個工作正常,但現在我已經將滑入式FragmentTransaction添加到後堆棧,以便用戶可以觸摸後退按鈕,並且Panel C將滑回並且Panel A將回來。再次像Gmail一樣。
除用戶轉到不同的選項卡上時,該事務仍在反向堆棧上,並在用戶按下時執行。片段最終在瘋狂的地方。當用戶導航到不同的選項卡時,我需要做的是將其從後退堆棧中移除。有什麼辦法可以做到這一點? FragmentManager似乎沒有讓你手動從背面堆棧中移除東西,而使用popBackStack()方法不僅僅是移除事務,而是執行它。我想在用戶導航時將其刪除,並在用戶返回時將其放回。
我想我可以通過使用「getBackStackEntryAt」來獲得這個事務的「返回堆棧條目」,但如果我不能刪除它並在用戶返回時將它放回原處並不好標籤。
我能想到的唯一可能的解決方案是不使用back棧並重寫onBackButtonPressed。如果有必要,我可以從那裏做一筆交易。
感謝您的任何幫助和抱歉,如果我是不連貫的。