2012-08-04 79 views
7

在我的主要活動中,我有一個操作欄NAVIGATION_MODE_TABS。每個選項卡的內容都是一個listfragment。片段交易,操作欄和backstack

我想這樣做是爲了當單擊listitem時,一個新的片段被帶入視圖,並且操作欄模式被更改爲NAVIGATION_MODE_STANDARD(以便現在隱藏標籤)。

我已經成功地得到這個用下面的代碼工作:

在listitemclick方法:

 ActionBar actionBar = getActivity().getActionBar(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 

     Fragment albumListFragment = new AlbumListFragment(); 
     albumListFragment.setArguments(bundle); 
     FragmentTransaction ft = getFragmentManager().beginTransaction(); 

     ft.replace(android.R.id.content, albumListFragment); 
     ft.addToBackStack(null); 

     // Commit the transaction 
     ft.commit(); 

     Log.i("FragmentList", "Item clicked: " + id); 

問題是,當我按下返回按鈕,標籤仍然走了,而前一個片段不會回到視圖中。

我做錯了什麼?是否與片段疊加有關?我是否應該以另一種方式去解決問題,甚至可以推翻後援?

- 編輯 -

爲了清楚 - 我打電話addToBackStack當我打電話fragmenttransaction.replace,但是當我按下返回按鈕,以前的片段是不可恢復的。

+0

檢查此鏈接一次http://www.vogella.com/articles/Android/article.html#fragments_tutorial – shassss 2012-08-04 06:24:59

+0

謝謝,但不是特別有用的這個問題.. – 2012-08-04 07:10:07

+0

使用addToBackStack是你想要的。 http://developer.android.com/guide/components/fragments.html#Transactions – Frohnzie 2012-08-04 16:57:37

回答

-1

堆棧結束當前的活動並轉到上一個活動,而不是前一個片段。 (見後臺指南:http://developer.android.com/guide/components/tasks-and-back-stack.html)。

你可以像你所建議的那樣通過重載onBackPressed來強制行爲,但是,我不知道我會以這種方式改變自然的Android行爲。如果您查看其他類似的應用程序,特別是核心應用程序,後退按鈕不會轉到前一個片段,而是前一個活動。

此外,您確實對「向上」按鈕的行爲具有完全控制權(這是您在左側帶箭頭的操作欄上的應用程序圖標)。您必須以編程方式將其設置爲按照ActionBar指南中所述的按鈕(讓我知道您是否需要知道如何執行此操作),並且您可以讓它在堆棧中設置一個前一個片段,保持某個地方。

+0

從文檔:然而,在您調用commit()之前,您可能需要調用addToBackStack(),以便將事務添加到片段事務的後端堆棧。該後退堆棧由該活動管理,並允許用戶通過按Back按鈕返回到前一個片段狀態。 – Frohnzie 2012-08-04 16:50:19

+0

@Frohnzie謝謝你,但問題是我正在使用addToBAckStack(),它不恢復以前的片段,當我按回來.. – 2012-08-05 02:01:49

+0

@rascuache代碼看起來正確。我做了完全一樣的事情。我不確定問題是什麼。使用addToBackStack是正確的。也許你可以發佈更多的代碼。 – Frohnzie 2012-08-05 16:39:27

0

我遇到完全相同的問題,並發現問題只發生在您將ActionBar重新設置爲NAVIGATION_MODE_STANDARD時。

對我來說,唯一的解決方案是將新片段放在沒有選項卡的輔助活動中,該輔助活動具有NAVIGATION_MODE_STANDARD。然後,您可以輕鬆使用Android提供的後退按鈕功能返回到使用NAVIGATION_MODE_TABS的活動並保持其狀態。

1

也許這有點晚了,我試着重新構建你的問題幾個小時,但沒有成功。我嘗試從你的問題中描述的方式(例如,ft.replace(android.R.id.content,albumListFragment);),但沒有任何效果,從由ActionBar選項卡託管的片段中的列表視圖切換到另一個視圖。在google和stackoverflow後,我使用this way成功切換選項卡中的片段,但沒有問題。

由於「操作欄顯示不正確」問題,它可能是由中描述的疊後回覆和UI更改造成的。您可能會嘗試重寫onBackStackChanged()回調並重新構建UI。

由於「堆棧不會帶回上一個碎片」問題,您可能需要發佈一些更多代碼以幫助其他人重新構建問題以找到答案。

希望有幫助。