问题在下面突出显示,第一部分描述了到目前为止的工作。
我在一项活动中使用多个片段。该图的上半部分显示了单个片段,例如具有一些随机内容的列表。如果我单击某处,它将打开AboutTheAppFragment
. 当我点击back
它ASingleFragment
再次显示。这工作得很好,但那是容易的部分:)
这是我用来打开新片段的代码。
AboutTheAppFragment aboutTheAppFragment = new AboutTheAppFragment();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(mContainer.getId(), aboutTheAppFragment, AboutTheAppFragment.class.getName());
fragmentTransaction.addToBackStack(null);
现在这是我的问题
而不是ASingleFragment
我喜欢显示一个TabHostPagerFragment
使用 TabHost 和 ViewPager 来显示片段(见下图)。假设我有两个片段TabOneFragment
和TabTwoFragment
,但 ViewPager 中只显示一个。这也很好用,我可以简单地在屏幕上滑动并在两个选项卡片段之间切换。但是,如果我单击某处打开AboutTheAppFragment
并back
再次单击,则两个片段TabOneFragment
都TabTwoFragment
不会显示任何内容。如果我旋转设备,它会再次重新加载/恢复片段,一切正常。所以我的问题是,当我单击按钮时,如何将它们添加TabOneFragment
到TabTwoFragment
后台堆栈中back
?请注意,当我设置为时,它的工作原理类似于场景TabOneFragment
1ASingleFragment
,然后我单击某处并再次单击返回。但是当我使用 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 始终为空。知道如何解决此问题并将选项卡存储在已保存的实例状态中吗?
我会很感激任何帮助。
最好的问候,迈克尔
编辑 :
这是片段的调用层次结构:
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