2013-03-19 52 views
0

我有一個叫做ProductDisplayActivity的活動,裏面有一個片段。這個片段被我的活動onCreate方法創建這樣的:捆綁值覆蓋

ProductInfoFrag = new ProductInfoFragment(); 
ProductInfoFragmentListener = (ProductRetrieveInfoInterface) ProductInfoFrag; 
FragmentTransaction InitialTransaction = fm.beginTransaction(); 
InitialTransaction.add(R.id.product_info_frame, ProductInfoFrag); 
InitialTransaction.commit(); 

在片段,通過一個接口,我調用這個函數:

@Override 
public void DownloadProductInfo(String ProductInfoDescription) { 
    ProductInfo.setText(Html.fromHtml(ProductInfoDescription)); 
    SavedString = new Bundle(); 
    SavedString.putString("SavedString", ProductInfoDescription); 
} 

我想保存ProductInfoDescription這樣,當替換frament我可以重新創建從該Bundle視圖,所以在onResume我有:

@Override 
public void onResume() { 
    if(SavedString != null){ 
     ProductInfo.setText(Html.fromHtml(SavedString.getString("SavedString"))); 
    } 
    super.onResume(); 
} 

然後我甲肝e帶有產品清單的名爲ResultsList的活動,點擊後我開始新的意向再次呼叫ProductDisplayActivity,當然不同的值。

問題:

我的問題是,如果我從product 1導航到product list的然後product 2,然後嘗試回導航按下back buttonproduct 1Bundleproduct 2ProductInfoDescription。 我不知道如何解決這個問題,當調用一個新的ProductDisplayActivity,然後new ProductInfoFragment不應該每個片段都有自己的Bundle自己的值,因爲是不同的片段?

回答

0

我以非最優方式解決了這個問題,所以如果有人提出更好的答案,我會很樂意檢查。

基本上我救字符串「SavedString」進入活動太多,所以當活動被恢復了我所說的片段功能設置文本:

ProductInfoFragmentListener.DownloadProductInfo(Html.fromHtml(SavedString.getString("SavedString"))); 
0

然後我有一個名爲ResultsList的產品列表的活動,點擊後我開始一個新的intent再次調用ProductDisplayActivity當然不同的值。

你確定你不是在搞這個術語嗎?這聽起來很像。
編輯:好吧,你沒有。通過在活動中嵌入Fragments,您可以將自己置於處理生命週期兩倍的位置。

  1. 請確保您有一個活動,通過它兩個片段(列表和信息)相互溝通。這些片段應該具有由活動實現的接口。
  2. 將Bundle對象作爲參數傳遞給每個片段。在構建片段時填寫信息。
  3. 除非您想顯示多個信息,否則使用FragmentManager.replace()可能會更好。
+0

'但表示用通過開展活動片段新意圖不是我想象的最好主意。「你能解釋一下爲什麼嗎?此外,該列表不是一個片段,而是一個活動,正如我在我的問題中所寫的,我從「產品活動」導航到「列表活動」,然後再次導航到「產品活動」。 – 2013-03-19 12:10:33

+0

只需很少的工作,您就可以通過在佈局中封裝碎片來適應多個屏幕。你不能真正把兩個不同的活動放在一起。 FragmentManager類使它更容易。通過將一個片段放入不同的活動中,您正在限制自己,因爲片段被設計爲模塊化並具有自己的生命週期。 – 2013-03-20 13:02:08