2017-06-03 4 views
1

をAndroidのXMLから表示findViewById()は、ListViewとしましょう。原因findViewById()は親ビューオブジェクトではなく、私たちはfindViewById()Android findViewById()のキャストの必要性は何ですか?

リストビューリストビュー=(リストビュー)findViewById(R.id.listView)の戻り値をキャストする必要がリストビューオブジェクトを返すという事実に

;鋳造なしfindViewById()

出力:findViewById()のリターンをキャストするためにneccessaryである理由

System.out.println(findViewById(R.id.mainListView).getClass());  // class android.widget.ListView 

System.out.println(findViewById(R.id.mainListView).getClass().getSimpleName()); // ListView 

System.out.println((findViewById(R.id.mainListView) instanceof ListView));  // true 

しかし、実際にfindViewById()は、リストビューオブジェクトを返しますか?

+0

このようなケースで本当に必要ですか?ドキュメントから: "注:コンパイラのサポートによっては、ほとんどの場合、結果のビューは自動的にターゲットクラスの型にキャストされますが、ターゲットのクラス型が拘束されていない場合は、明示的なキャストが必要です。 (このメソッドは汎用的で、型引数は割り当てようとしている型によって推論されます)。 –

答えて

0

ListViewオブジェクトをキャストしていないので、findViewById(int id)の結果をキャストする必要があります。これは、ListViewが仕様であるビューをキャストします。ポイントとして

https://stackoverflow.com/a/19752066/2725502

0

findViewById関数は、サブビューの代わりにビューを返し、私はあなたが戻り値と情報がはgetClassから入手混乱していると思います。 findViewById(R.id.mainListView).getClass()ビューはまだそれがサブビューの情報です持っているのでは、あなたがビューの値を返す way.But実際findViewByIdを通してそれを得ることができますので、リストビューでの出力それを手動でケーシングする必要があります。

関連する問題