【发布时间】:2013-09-17 20:35:30
【问题描述】:
我在我的项目中使用了兼容包 v4,但在将 Fragment 从视图中移除后,我遇到了保留它的问题。我有我的Activity 显示 2 个片段......左侧的菜单框架,右侧的内容窗格。菜单框架有 3 个不同的菜单(片段)可以显示。
这就是我替换菜单片段的方式:
public void showMenuFragment( Fragment fragment, String tag ) {
showFragment( R.id.menu_frame, fragment, tag, false);
setLastMenuPushed( tag );
}
protected void showFragment( int resId, Fragment fragment, String tag, boolean addToBackStack ) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
if ( fragmentManager.findFragmentByTag( tag ) != null && fragment.isAdded() ) {
transaction.remove( fragment );
}
transaction.replace( resId, fragment, tag ).setTransition( FragmentTransaction.TRANSIT_FRAGMENT_OPEN ).setBreadCrumbShortTitle( tag );
if ( addToBackStack ) {
transaction.addToBackStack( tag );
}
transaction.commit();
}
菜单Fragments 需要先加载数据才能显示,所以我展示了一个加载微调器。第一次加载后,我不想再次加载它,除非 Activity 完成。
当我调用showMenuFragment(...) 时,我尝试使用FragmentManager.findFragmentByTag(String tag) 传递Fragment,但它始终是null,所以每次我想显示不同的菜单时我都必须创建一个新的Fragment。
我的问题是,这些Fragments 在被其他菜单替换后如何保留?我想避免保留对 Fragments 的手动引用,因为当设备旋转时,我的 Activity 类的实例被破坏,我会丢失这些引用。
编辑:用更简单的术语来说,我希望FragmentManager 跟踪以前的Fragments,而不必将它们添加到后台堆栈中。我不想点击返回按钮并看到显示的上一个菜单。
【问题讨论】: