0

私はこれまでに何度も BaseAdapter クラスと ArrayAdapter クラスを拡張してきましたが、BaseAdapter について常に 1 つの厄介な質問がありました。getView などの android.widget.Adapter インターフェースからいくつかのメソッドが存在しないのはなぜですか (当然の常識では、これが必要な場合) コンパイラ エラーを引き起こしますが、hasStableIds のような他のものはそのようなエラーを引き起こしませんか? BaseAdapter がこれらのメソッドを ListAdapter から継承し、ListAdapter が Adapter からこれらのメソッドを継承することは知っていますが、実装する必要があるのはいくつかだけで、他は実装しないのはなぜでしょうか? Androidのドキュメントには、BaseAdapterのドキュメントに特にこれらの呼び出しが含まれていないため、実装が必要な場合にのみBaseAdapterの拡張のためのこれらの特定の呼び出しが必要であることを示すものはどこにありますか? 私は何かが欠けていることを知っています、oop の原理を理解しているか、ドキュメントを読む能力があります。洞察をありがとう!

注: コンパイラ エラーは次のとおりです。

MyAdapter is not abstract and does not override abstract method getItemId(int) in Adapter

私が見つけた必要なメソッドは、getItem、getCount、getItemId、および getView です。

2 番目の注意: これらはすべて、Adapter および ListAdapter の抽象メソッドです。

4

1 に答える 1

1

getView などの android.widget.Adapter インターフェースのいくつかのメソッドが存在しないと (もちろん、常識的にはこれが必要であると言うでしょう)、コンパイラ エラーが発生するのはなぜですか?

BaseAdapterは抽象クラスでありgetView()、抽象メソッドであるためです。

hasStableIds のような他のものでは、そのようなエラーは発生しませんか?

必要に応じて使用できるサブクラスBaseAdapterの実装があるためです。hasStableIds()

Android のドキュメントには、特に BaseAdapter のドキュメントにこれらの呼び出しが含まれていません。

Adapterドキュメントのセクションから継承されたメソッドでそれらを見つけることができますBaseAdapter

実装が必要な場合、BaseAdapter の拡張機能に対する特定の呼び出しが必要であることを示す兆候はどこにありますか?

Adapterおよびで定義された、実装されListAdapterBaseAdapterいないメソッドが必要です。

AdapterおよびListAdapterで定義された、実装するメソッドは必須ではありBaseAdapter ませんが、必要に応じてオーバーライドできます。

于 2013-08-06T21:16:59.020 に答える