2012-03-13 71 views
5

這裏是我的使用情況:如何跨不同片段重用Android片段實例?

我需要創建使用ActionBar Navigation Tabs 3個標籤,和我使用ActionBarSherlock做到這一點。 3個標籤中的每一個都是它自己的Fragment。但是,每個選項卡中都顯示了一些常見信息(在我的案例中是產品標題,說明)。我爲這些常見信息創建了另一個片段,並在每個主要片段佈局中引用此片段,如this

這裏是我的問題:

我想重用檢索和顯示普通信息的片段實例。我使用下面的代碼,但似乎總是在每個主要片段中創建一個公共片段的新實例。

FragmentManager fm = getFragmentManager(); 
    f = (ProductDetailsInfoFragment) fm.findFragmentByTag("prodinfo"); 

    if (f == null) { 
     Log.d(TAG, "fragment not found...creating new instance"); 

     f = new ProductDetailsInfoFragment(); 
     f.setTargetFragment(this, 0); 
     fm.beginTransaction().replace(R.id.prod_info_fragment, f, "prodinfo").commit();   
    } 
+0

您無法重複使用片段的同一個實例,您必須創建一個新片段用於其他片段。 – 2012-03-13 20:02:03

+0

呃,這就是我所害怕的。我想我將不得不在片段中添加一些邏輯來緩存,這樣我就不會多次檢索數據。 – Sanjeev 2012-03-13 20:23:01

回答

2

如果您願意,您可以共享片段。你需要實現ActionBar.TabListener,並在你的onTabSelected中選擇你想要使用的片段。

你可以做這樣的事情:https://gist.github.com/anonymous/5415274

一個更好選擇是存儲由這兩個片段在一個單獨的對象,你可以在它們之間共享所需的數據。如果您願意,這將允許您在沒有附加UI的情況下測試檢索。這也允許兩個片段根據需要發散,使它們成爲單一目的,而不必將兩個動作都需要的所有代碼保存在一個片段中。