我正在使用片段创建一个平板电脑优化的应用程序。我在左侧有一个细小的导航片段,带有按钮来控制将哪些片段加载到占据屏幕其余部分的两个 ViewGroup 容器中。
例如,如果按下导航片段中的按钮,第一个容器将加载项目列表片段(例如,用于设置、客户等),第二个容器将加载片段以显示项目详细信息。
由于我想将片段保留在内存中(因此,当从设置导航到客户然后返回设置时,以前的设置片段应该在那里,这样用户就不会丢失他们所在的位置) - 我已经创建了片段实例活动的变量
SettingsListFragment settingsListFragment;
SettingsDetailFragment settingsDetailFragment;
CustomerListFragment customerListFragment;
CustomerDetailFragment customerDetailFragment;
然后我在必要时创建这些片段,并根据需要用这些片段替换容器。例如。
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if(settingsListFragment == null){
settingsListFragment = new SettingsListFragment();
}
fragmentTransaction.replace(R.id.fragment_container_left, settingsListFragment);
fragmentTransaction.commit();
我的问题是,如何在方向更改中保留这些实例?
我假设我不应该根据 http://developer.android.com/resources/articles/faster-screen-orientation-change.html使用活动 onRetainNonConfigurationInstance() 方法,因为“要非常小心你的对象传递 onRetainNonConfigurationChange() ...这意味着你永远不应该传递 View、Drawable、Adapter 等”
我也尝试从片段管理器中获取片段,
Fragment clf = fragmentManager.findFragmentByTag("CLIENT LIST");
但它返回为空。我认为它会在片段被替换后被释放。
感谢您提供任何帮助/建议。