
AlertDialog
のView
をカスタマイズしてEditText
を追加。そして、OKボタンが押されたときに、そこに入力されたデータにfindViewById
を使ってアクセスしようとするとNullPointerException
が発生した。
AlertDialogでOKが押されたときの処理
エラーは以下。
java.lang.NullPointerException: Attempt to invoke virtual method ‘android.text.Editable android.widget.EditText.getText()’ on a null object reference
どうやらEditTextが取れていない。
これは、mixiさんの課題で引っかかった問題。MainActivity
にAssignmentDialogFragment
というインナークラスを作ってアラートダイアログを実装していた。その中の、onCreateDialog
メソッド内でこんな感じで書いていた。
https://gist.github.com/daipresents/8ab63dc0173c36520ca54c7bbbec5855.js?file=MainActivity.java
builder.setView(R.layout.dialog);
でカスタムレイアウトを設定している。そして、EditText editText = (EditText) getActivity().findViewById(R.id.yourName);
でダイアログに表示されるEditText
の値を取ろうとしているが、null
が返ってきている。調べてみると、書き方がまずいらしい。以下のように直したら動いた。
https://gist.github.com/daipresents/8ab63dc0173c36520ca54c7bbbec5855.js?file=gistfile1.txt
まず、カスタムレイアウトをLayoutInflater
を使って取得。DialogInterface.OnClickListener()
の中で使いたいのでメンバ変数に保管。
LayoutInflater inflater = (LayoutInflater)getActivity().getSystemService(LAYOUT_INFLATER_SERVICE);
this.layout = inflater.inflate(R.layout.dialog, (ViewGroup) getActivity().findViewById(R.id.dialog_layout));
そして、builder.setView(layout);
で取得したレイアウトを設定。EditText editText = (EditText) layout.findViewById(R.id.yourName);
でそれにアクセス。
なぜこうしないととれないのかがよくわからない。