onCreateView仅在DialogPreference中为Fragment调用一次

时间:2016-07-14 14:05:30

标签: android android-fragments dialog-preference

我有一个片段覆盖了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”。

0 个答案:

没有答案