我有一个片段覆盖了public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
方法而没有像这样调用超级:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.my_id, container, false);
return view;
}
此片段既用于活动,也用于自定义DialogPreference
实现。该片段包含在活动的布局文件中,并且包含<fragment>
标记的首选项,并且两者都具有android:id
属性(尽管活动和首选项布局的ID不同)。 / p>
自定义DialogPreference在PreferenceFragment中使用,一切都按预期工作。 当我在PreferenceScreen中单击自定义首选项时,将调用onCreateView方法并正确显示带有我的Fragment的DialogFragment。当我按回时,对话框关闭,再次显示PreferenceScreen。在下一次单击时,再次调用onCreateView,一切正常。
现在我正在尝试向此片段添加“RetainedFragment”以存储某些状态,如here所述。为了实现这个目标,我在我的片段中覆盖了onCreate,如下所示:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FragmentManager fm = getFragmentManager();
retainedFragment = (RetainedFragment) fm.findFragmentByTag("retained");
if(retainedFragment == null) {
retainedFragment = new RetainedFragment();
fm.beginTransaction().add(retainedFragment, "retained").commit();
}
}
这适用于Activity案例,但现在,当我尝试连续两次打开DialogPreference 时,应用程序崩溃了
java.lang.IllegalStateException:
Fragment com.myapp.MyFragment did not create a view
我设置了一些断点,问题似乎是我的片段的onCreateView
方法仅在首次打开PreferenceScreen后点击我的DialogPreference时被调用。
当我在中间关闭PreferenceScreen时,它也可以正常工作。
值得注意的是,初始片段出现异常,而不是新的“RetainedFragment”。