問題は以下に強調表示されています。最初の部分では、これまでのところ何が機能しているかを説明しています。
1 つのアクティビティで複数のフラグメントを使用します。図の上部は、ランダムなコンテンツを含むリストなど、単一のフラグメントを示しています。どこかをクリックすると、 が開きますAboutTheAppFragment
。クリックback
するとまた表示ASingleFragment
されます。これは完全に機能しますが、それは簡単な部分でした:)
これは、新しいフラグメントを開くために使用したコードの抜粋です。
AboutTheAppFragment aboutTheAppFragment = new AboutTheAppFragment();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(mContainer.getId(), aboutTheAppFragment, AboutTheAppFragment.class.getName());
fragmentTransaction.addToBackStack(null);
ここに私の問題があります
代わりに、TabHost と ViewPager を使用してフラグメントを表示する をASingleFragment
表示するのが好きTabHostPagerFragment
です (下の図を参照)。と の 2 つのフラグメントがあるTabOneFragment
とTabTwoFragment
しますが、ViewPager には 1 つしか表示されません。これもうまく機能します。画面上をスライドするだけで、2 つのタブ フラグメントを切り替えることができます。ただし、どこかをクリックして を開き、もう一度AboutTheAppFragment
クリックback
すると、両方とも断片化され、何も表示さTabOneFragment
れTabTwoFragment
ません。デバイスを回転させると、フラグメントが再度リロード/復元され、すべて正常に動作します。だから私の質問は、ボタンをクリックしたときにそれらが正しく表示されるように、バックスタックに追加するTabOneFragment
にはどうすればよいですか? として設定すると、シナリオ1のように機能することに注意してくださいTabTwoFragment
back
TabOneFragment
ASingleFragment
、次にどこかをクリックして、もう一度クリックします。しかし、TabHostPagerFragment を使用すると機能しません。
TabHostPagerFragment のコード スニペットを次に示します。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the tabs pager fragment in the container
View view = inflater.inflate(R.layout.fragment_tabs_pager, container, false);
mContainer = container;
// Set up the TabHost
mTabHost = (TabHost) view.findViewById(android.R.id.tabhost);
mTabHost.setup();
// Set up the ViewPager
mViewPager = (ViewPager) view.findViewById(R.id.pager);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Now initialize the TabsAdapter which will be used to manage the tabs
mTabsAdapter = new TabsAdapter(activity, mTabHost, mViewPager);
// Finally add the tabs to the TabsAdapter: meal plan for today and meal plan for the week
mTabsAdapter.addTab(mTabHost.newTabSpec("TabOne").setIndicator("TabOne", TabOneFragment.class, null);
mTabsAdapter.addTab(mTabHost.newTabSpec("TabTwo").setIndicator("TabTwo", TabTwoFragment.class, null);
if (savedInstanceState != null) {
// NEVER REACHES THIS CASE
mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab"));
}
}
savedInstanceState が常に null であることに気付きました。これを修正して、保存されたインスタンスの状態でタブを保存する方法はありますか?
助けていただければ幸いです。
敬具、マイケル
編集 :
フラグメントの呼び出し階層は次のとおりです。
09-25 09:19:25.695: V/TabsPagerParentFragment(1820): onPause
09-25 09:19:25.695: V/TabsPagerParentFragment(1820): onStop
09-25 09:19:25.703: V/TabsPagerParentFragment(1820): onDestroyView
09-25 09:19:25.710: V/AboutTheAppFragment(1820): onAttach
09-25 09:19:25.710: V/AboutTheAppFragment(1820): onCreate: savedInstanceState == null
09-25 09:19:25.710: V/AboutTheAppFragment(1820): onCreateView: savedInstanceState == null
09-25 09:19:25.812: V/AboutTheAppFragment(1820): onViewCreated
09-25 09:19:25.812: V/AboutTheAppFragment(1820): onActivityCreated
09-25 09:19:25.812: V/AboutTheAppFragment(1820): onViewStateRestored
09-25 09:19:25.812: V/AboutTheAppFragment(1820): onStart
09-25 09:19:25.812: V/AboutTheAppFragment(1820): onResume
09-25 09:19:27.304: V/AboutTheAppFragment(1820): onPause
09-25 09:19:27.304: V/AboutTheAppFragment(1820): onStop
09-25 09:19:27.304: V/AboutTheAppFragment(1820): onDestroyView
09-25 09:19:27.304: V/AboutTheAppFragment(1820): onDestroy
09-25 09:19:27.312: V/TabsPagerParentFragment(1820): onCreateView: savedInstanceState == null
09-25 09:19:27.320: V/TabsPagerParentFragment(1820): onViewCreated
09-25 09:19:27.320: V/TabsPagerParentFragment(1820): onActivityCreated
09-25 09:19:27.328: V/TabsPagerParentFragment(1820): onViewStateRestored
09-25 09:19:27.328: V/TabsPagerParentFragment(1820): onStart
09-25 09:19:27.328: V/TabsPagerParentFragment(1820): onResume