
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メソッド内でこんな感じで書いていた。
builder.setView(R.layout.dialog);でカスタムレイアウトを設定している。そして、EditText editText = (EditText) getActivity().findViewById(R.id.yourName);でダイアログに表示されるEditTextの値を取ろうとしているが、nullが返ってきている。調べてみると、書き方がまずいらしい。以下のように直したら動いた。
まず、カスタムレイアウトを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);でそれにアクセス。
なぜこうしないととれないのかがよくわからない。