【发布时间】:2015-09-03 18:50:17
【问题描述】:
我有一个活动和几个片段。我的活动有一个抽屉列表,我用它来切换片段,大致如下所示:
public class MainActivity extends AppCompatActivity
{
private PreferencesFragment preferencesFragment;
private HomeFragment homeFragment;
private void selectMenuItem(position)
{
Fragment fragment = null;
switch (position) {
case 0:
if (preferencesFragment == null) {
preferencesFragment = new PreferencesFragment();
}
fragment = preferencesFragment;
break;
case 1:
if (homeFragment == null) {
homeFragment = new HomeFragment();
}
fragment = homeFragment;
break;
}
getFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, fragment)
.commit();
}
}
因此,每当我单击抽屉列表项时,都会以正确的位置调用 selectMenuItem。这会加载现有片段或在需要时创建新片段。问题是,即使片段已经存在,onCreateView 方法也会在片段中触发。我想保持视图的状态,只执行一次 onCreateView 中的代码。文档对 onCreateView 这么说:
当片段第一次绘制其用户界面时,系统会调用它。要为您的 Fragment 绘制 UI,您必须从此方法返回一个 View,它是 Fragment 布局的根。如果片段不提供 UI,则可以返回 null。
那么为什么每次执行 selectMenuItem 时都会调用它?我验证它实际上没有执行新的 Fragment() 块并加载属性值。当我只使用 1 个 Activity 时,如何保持 Fragments 的状态?
savedInstanceState 在 Fragments 的 onCreateViewMethod 中也是 null。在 Fragments 中永远不会触发 onSavedInstanceState。
【问题讨论】: