5

ArrayAdapterクラスを拡張する独自のアダプターを作成しているときに、使用可能なさまざまなコンストラクターに出くわし、それらすべてにtextViewResourceIdパラメーターが必要であることに気付きました。そのため、最初は、カスタムアダプタクラスandroid.R.id.text1をフィードすることにしました。

MyAdapter adapter = new MyAdapter(this, R.layout.myRow, android.R.id.text1);

ただし、開発の後半で、getViewメソッドをオーバーライドすることにしました。

TextView label = (TextView) myRow.findViewById(android.R.id.text1);
label.setText("Position #" + position);

これはうまくいきました。しかし、この質問が思い浮かびました。行を表示する方法のロジックを実行している場合、カスタムアダプターを開始するときに、コンストラクターにtextViewResourceIdを提供する必要が本当にありますか?または、 getViewをオーバーライドすると、そのパラメーターは不要になりますか?私の考えが正しければ、とにかく表示動作をオーバーライドすることを知ってアダプターをインスタンス化するための一般的な方法は何ですか?

4

2 に答える 2

9

オーバーライドしている場合は、適切な .. を指定する必要getViewはありませtextViewResourceId.. 0 を渡すことができます. がそのArrayAdapterID にアクセスしようとするのはgetView..クラスはビュー ID を想定しています。ビュー ID をスーパー コールに渡す必要があります。ただし、使用されないため、0 にすることができます。getViewtextViewResourceId

このすべてを確認するArrayAdapterソース

適切なものtextViewResourceIdを指定せず、.. をオーバーライドしないと、ビュー全体がgetView..getViewであると想定されます。ビューが.. でない場合、ClassCastException.. からのクラッシュが発生します。ArrayAdapterTextViewTextView

于 2012-12-13T22:00:29.883 に答える
0

いかなる種類の組み込みアダプタも使用する必要はありません。

BaseAdapterを拡張して、表示する内容、保持するデータの種類などの独自のルールを作成できます。

実際、baseAdapterの使用は非常に簡単であるため、Androidに付属している組み込みのアダプターを使用することはほとんどありません。

于 2012-12-13T22:45:27.773 に答える