ビューをインスタンス化するときにキャストする理由を知っている人はいますか?キャストを使用してアンドロイドでビューをインスタンス化する理由
例えば:アンドロイドのすべてのビューがViewクラスのサブクラスであり、findViewByIdはサブクラスについては何も知らない、例えば独自のカスタムビューを持っている可能性があるためだTextView textView = (TextView) findViewById(R.id.textView);
ビューをインスタンス化するときにキャストする理由を知っている人はいますか?キャストを使用してアンドロイドでビューをインスタンス化する理由
例えば:アンドロイドのすべてのビューがViewクラスのサブクラスであり、findViewByIdはサブクラスについては何も知らない、例えば独自のカスタムビューを持っている可能性があるためだTextView textView = (TextView) findViewById(R.id.textView);
。あなたのビュークラスについて知りたいと思う方法はありません。そのため、スーパークラスが返され、より具体的な実装に手動で型キャストする必要があります。
理由は、Androidでの返品タイプfindViewById()
がView
であるためです。
しかし、@ Bajjiが彼の(現在受け入れられている)答えで述べたのとは対照的に、関数は、そのクラスに自動キャストして実行することを期待している型のことを知っている。あなたはこの関数が定義されなければならない場合、あなたはこのようにそれを行うことができ
protected <T extends View> T findViewById(@IdRes int id) {
return (T) getRootView().findViewById(id);
}
:残念ながら、Androidのは、以下の機能があることない...
を、この機能を利用しない
このblog postにもう少し詳しい情報があります。
'findViewById()'はビューをインスタンス化しません。 – CommonsWare
findViewById()はビューを返し、そのビューはどのビューでもかまいません。 –
私は大変な質問が下落したときを見るのは嫌ですが、これらの質問に対する誤った答えは非常に上向きになっています。私はその質問が些細なようだが、なぜdownvoteを理解するのですか? – Vasiliy