1. ホーム
  2. java

[解決済み] DialogFragmentのカスタムレイアウト OnCreateView vs. OnCreateDialog

2023-03-18 08:41:03

質問

独自のレイアウトで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. を使いたいので、ちょっとググってから、2番目の方法を試してみました。 OnCreateView

そこで私は、2行の 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

ガチガチです。

どのように解決するのですか?

この最初のアプローチは私のために動作します...私がFindViewByIDを使用したいまで。

私は、あなたがスコープを使用していないことを推測します。 findViewById() が返すViewに inflate() に変更する場合は、次のようにします。

View view = i.inflate(Resource.Layout.frag_SelectCase, null);
// Now use view.findViewById() to do what you want
b.setView(view);

return b.create();