Androidでのつまづき02「TextViewがNullPointerExceptionで落ちる」
今回はまたまた最初のほうで躓いたので、メモ。
ダイアログを使ってユーザの入力したTextを表示しよう、と思い立ち
実際に書いているとあれ??となった。
LayoutInflater inflater = LayoutInflater.from(MainActivity.this); /** *dialoglayout = Dialog用のxmlファイル *containerはTextView「user_input」を含むLayout *inputStrはユーザの入力した文字列が入っている。 */ View view = inflater,inflate(R.layout.dialoglayout, (LinearLayout)findViewById(R.id.container)); TextView tv = (TextView)findViewById(R.id.user_input); tv.setText(inputStr); /*省略*/
と書くとtv.setText()で落ちる。ログを見るとjava.lang.NullPointerException。
ぬぬぬ、インスタンス化してあるし大丈夫なはずじゃ…と思っていました。
findViewById()はきちんとどのViewから探すかを指定する
今回問題だったのが以下の部分。
TextView tv = (TextView)findViewById(R.id.user_input);
ここがuser_inputというIDを見つけられないために、Nullで落ちていた模様。
デフォルトで書いてしまうと、おそらく今現在参照しているxml(今回はMainActivity)
の中から探そうとしてしまうらしい(当然っちゃ当然だし少し考えればわかるかも)。
したがって、正しいコードは以下
TextView (TextView)view.findViewById(R.id.user_input);
viewは直前でinflateしているものなので、ここを指定してあげると、
きちんとこの中から該当のTextViewを探し出してきてくれる。
終わります。