我有一个 Fragment 覆盖该public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
方法而无需像这样调用 super :
@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 不同)。
自定义 DialogPreference 在 PreferenceFragment 中使用,一切都按预期工作。当我单击 PreferenceScreen 中的自定义 Preference 时,将调用 onCreateView 方法,并且正确显示包含我的 Fragment 的 DialogFragment。当我按回时,对话框关闭并再次显示 PreferenceScreen。在下一次单击时,再次调用 onCreateView 并且一切正常。
现在我正在尝试向这个 Fragment 添加一个“RetainedFragment”来存储一些状态,如此处所述。为了实现这一点,我在我的片段中覆盖了 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 时,它也可以正常工作。
值得注意的是,异常发生在初始 Fragment,而不是新的“RetainedFragment”。