フラグメントの 1 つのレイアウトに FragmentTabHost があります (parentFragment と呼びましょう)。ここで、parentFragment の onCreateView で、タブホストに入る各フラグメントをプログラムで初期化します。parentFragment が作成されると、すべてが正常に機能しているように見え、最初のタブのフラグメントが正しく表示されます。
しかし、一度タブを切り替えるとすぐに、フラグメントは消えます (タブホストの背景色は見えますが、tabcontent-container のコンテンツは見えません)。また、最初のフラグメントに戻ると、最初のフラグメントがなくなります。私のロギングが示すように、フラグメントは実際に作成されていますが、表示されません。
FragmentPagerAdapterでViewPagerも使用しようとしたため、フラグメントの(再)作成に関係していると思います。最初の 2 つのフラグメント (setOffscreenPageLimit() ==1 によりプリロードされた) をうまく切り替えることができましたが、それ以降に (再) 作成されたフラグメントも空白でした。
誰か考えはありますか??
これが私のコードの一部です:
親フラグメントの XML の抽出:
...
<android.support.v4.app.FragmentTabHost
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_alignParentTop="true" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp" />
<FrameLayout
android:id="@+id/realtabcontent"
android:layout_below="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
</android.support.v4.app.FragmentTabHost>
...
親フラグメントの XML の抽出:
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d(TAG, "onCreateView");
ViewGroup layoutContainer = (ViewGroup) inflater.inflate(R.layout.fragment_app_details_test, container, false);
tabHost = (FragmentTabHost) layoutContainer.findViewById(android.R.id.tabhost);
tabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent);
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("TAB1"),
FragmentSubTab1.class, null);
tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("TAB2"),
FragmentSubTab2.class, null);
tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("TAB3"),
FragmentSubTab3.class, null);
return layoutContainer;
}
...
サブタブのフラグメントでの単純なレイアウト インフレーション:
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup layoutContainer = (ViewGroup) inflater.inflate(R.layout.subfragment1, container,
false);
initUi(layoutContainer);
return layoutContainer;
}
...