2016-11-22 17 views
0

私は最初のアンドロイドアプリを開発中で、spinnerを私のビューに追加しようとしています。 Android Developers Guideを見て、それを私のビューに追加する方法と実際にアイテムをスピナーに追加する方法を考えました。私は実際にアイテムを追加しようと、次のときを除き初期化されたオブジェクトのNullPointerException

がポップアップ表示されます:

Java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)' on a null object reference

あなたは私がスピナーオブジェクト上.setAdapter()を実行しようとして見ることができるように。私はスピナーオブジェクトを初期化せずにこれをしようとするだろう場合は通常、このエラーが発生しますが、私はなかった:私はそれは問題ではないsetContentView()を呼び出した後

Spinner spinner = (Spinner) findViewById(R.id.where_spinner); 
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.where_array, android.R.layout.simple_spinner_item); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
spinner.setAdapter(adapter); 

上記のコードは、すべてと呼ばれています。

スピナーのような単純なことが私に大きなトラブルを引き起こしているのはどうでしょうか?

ありがとうございました。

EDIT

私は特定のコメントを見た後、私はwhere_spinnerが含まれているレイアウトファイルダイアログのために使用するレイアウトであることを追加するのを忘れたことを見ました。 where_spinnerにアクセスできるようにする必要があります。レイアウト内の他のオブジェクトも同じですからです。

+1

'findViewById'は' null 'を返すことができます –

+1

'spinner'はnullです。 'setContentView()'で設定したレイアウトは実際には 'where_spinner'を持っていますか?フラグメントレイアウト? – laalto

+0

@laaltoそれはしません。 'where_spinner'はダイアログに使われているレイアウトファイルにありますが、私は同じレイアウトの他の要素でこれを行うことができるので、大したことではないと思っていました。 –

答えて

3

spinnernullです。 Activity#findViewById()は、setContentView()、またはsetContentView()で設定したアクティビティのビュー階層にビューが見つからない場合はnullを返します。

コメントに基づき、where_spinnerは実際にはダイアログビュー階層にあります。ダイアログの階層ではfindViewById()を呼び出してください。