DialogFragment 的自定义布局 OnCreateView 与 OnCreateDialog

2023-12-27

我正在尝试使用我自己的布局创建 DialogFragment。

我见过几种不同的方法。有时布局在 OnCreateDialog 中设置如下: (我正在使用 Mono,但我已经习惯了 Java)

public override Android.App.Dialog OnCreateDialog (Bundle savedInstanceState)
{
    base.OnCreateDialog(savedInstanceState);
    AlertDialog.Builder b = new AlertDialog.Builder(Activity);
        //blah blah blah
    LayoutInflater i = Activity.LayoutInflater;
    b.SetView(i.Inflate(Resource.Layout.frag_SelectCase, null));
    return b.Create();
}

第一种方法对我有用......直到我想使用findViewByID.所以经过一番谷歌搜索后,我尝试了第二种方法,其中涉及覆盖OnCreateView

所以我注释掉了两行OnCreateDialog设置布局然后添加以下内容:

public override Android.Views.View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    View v = inflater.Inflate(Resource.Layout.frag_SelectCase, container, false);
        //should be able to use FindViewByID here...
    return v;
}

这给了我一个可爱的错误:

11-05 22:00:05.381: E/AndroidRuntime(342): FATAL EXCEPTION: main
11-05 22:00:05.381: E/AndroidRuntime(342): android.util.AndroidRuntimeException: requestFeature() must be called before adding content

我很困惑。


我使用以下代码也遇到了同样的异常:

public class SelectWeekDayFragment extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new AlertDialog.Builder(getActivity())
        .setMessage("Are you sure?").setPositiveButton("Ok", null)
        .setNegativeButton("No way", null).create();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.week_day_dialog, container, false);

        return view;    
    }
}

您必须选择覆盖only oneDialogFragment 中的 onCreateView 或 onCreateDialog。覆盖两者将导致异常:“在添加内容之前必须调用 requestFeature()”。

重要的

如需完整答案,请查看@TravisChristian 评论。正如他所说,您确实可以覆盖两者,但是当您在创建对话框视图后尝试膨胀视图时,问题就出现了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DialogFragment 的自定义布局 OnCreateView 与 OnCreateDialog 的相关文章

随机推荐