您可以將片段放入片段中作爲操作欄中的選項卡嗎?片段在行動欄選項卡片段?
我有一個Android(3.0 /蜂窩)應用程序,主要活動有一個帶有3個選項卡的操作欄。選項卡被添加到我的activity的onCreate()方法中,並且選項卡片段使用TabListener添加/刪除。該代碼與http://developer.android.com/guide/topics/ui/actionbar.html#Tabs上的樣本幾乎相同。
的TabListener看起來是這樣的:
public class SwapOutTabListener implements ActionBar.TabListener {
public SwapOutTabListener(Fragment fragment) {
_fragment = fragment;
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.add(R.id.fragment_container, _fragment, null);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(_fragment);
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// do nothing
}
private Fragment _fragment;
}
我的選項卡中有兩個是簡單的片段,它們只包含在其中一個TextView的,有點像這樣(大多數屬性爲清楚起見移除):
<LinearLayout>
<TextView android:text="Tab 1" />
</LinearLayout>
但我的其中一個標籤的片段更復雜,並且包含兩個嵌入片段,有點像這樣:
<LinearLayout>
<fragment
android:name="...Fragment_1"
android:id="@+id/frag1"
/>
<fragment
android:name="...Fragment_2"
android:id="@+id/frag2"
/>
</LinearLayout>
當用戶選擇此片段的選項卡時,所有三個片段(選項卡片段,以及兩個嵌入片段)都會調用所有啓動生命週期方法(onStart(),onResume())。
但是,當用戶選擇另一個選項卡時,只有選項卡片段會得到任何生命週期結束方法(onPause(),onStop()等)。這兩個嵌入的片段從未得到任何這些調用,並且從不關閉。
這會導致問題重新選擇的選項卡時,由於運行時加載的標籤片段時重複片段ID的抱怨:
Binary XML file line #7: Duplicate id 0x7f05000a, tag null, or parent id 0x7f050009 with another fragment for ...Fragment_1
這是我的責任,以消除這些嵌入的片段,當標籤片段已移除?如果是這樣,那麼,我到底什麼時候?
你能張貼執行標籤交換的TabListener代碼?在這裏發佈的問題中,還有重複的'android:id =「@ + id/frag2」'行有意或只是一個抄寫錯誤? – adamp 2011-03-11 22:58:01
@adamp,是的,重複的id是一個轉錄錯誤...我編輯了這個問題來糾正這個問題。我還將我的TabListener代碼添加到問題中。 – 2011-03-11 23:40:15