アクションバーのタブのフラグメント内にフラグメントを配置できますか?
3 つのタブを持つアクション バーを持つメイン アクティビティを持つ Android (3.0/Honeycomb) アプリケーションがあります。タブはアクティビティの 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;
}
私のタブの 2 つは単純なフラグメントです。それらには単一の TextView が含まれているだけで、次のようになります (明確にするためにほとんどの属性が削除されています)。
<LinearLayout>
<TextView android:text="Tab 1" />
</LinearLayout>
しかし、私のタブの 1 つのフラグメントはより複雑で、次のような 2 つの埋め込みフラグメントが含まれています。
<LinearLayout>
<fragment
android:name="...Fragment_1"
android:id="@+id/frag1"
/>
<fragment
android:name="...Fragment_2"
android:id="@+id/frag2"
/>
</LinearLayout>
ユーザーがこのフラグメントのタブを選択すると、すべての起動ライフサイクル メソッド (onStart()、onResume()) が 3 つのフラグメントすべて (タブ フラグメントと 2 つの埋め込みフラグメント) に対して呼び出されます。
しかし、ユーザーが別のタブを選択すると、タブ フラグメントのみがライフサイクル終了メソッド (onPause()、onStop() など) のいずれかを取得します。2 つの埋め込まれたフラグメントは、これらの呼び出しのいずれも受信せず、シャットダウンされることもありません。
これにより、タブ フラグメントをロードするときにランタイムがフラグメント ID の重複を訴えるため、タブが再選択されたときに問題が発生します。
Binary XML file line #7: Duplicate id 0x7f05000a, tag null, or parent id 0x7f050009 with another fragment for ...Fragment_1
タブフラグメントが削除されたときにこれらの埋め込まれたフラグメントを削除するのは私の責任ですか? もしそうなら、いつ、正確に、私はそれをしますか?