アプリケーションでカスタム listView を使用しようとしていますが、その動作原理についていくつか質問があります。カスタム アダプターを実装したとき、そのメソッド (特に getView メソッド) は他のクラスから呼び出さずにどのように機能しますか?
3 に答える
アダプターをビュー (ListView
または などGridView
) に設定すると、そのビューはある時点でいくつかの項目を表示する必要があります。したがってgetView
、アダプターで次のように呼び出します。
getView(int position, View convertView, ViewGroup parent).
位置は、リスト/グリッド/その他の項目の位置です。これconvertView
は、以前の呼び出しによってすでに膨張している可能性のあるリサイクルされたビューgetView()
、またはまだ膨張していない場合は null です ( convertView とビューのリサイクルに関するこの回答を参照してください。
親はビューを拡張するために使用されるため、親ビューに関連して正しいレイアウト パラメーターを計算できます。
インフレが遅いことに注意してください。そのconvertView
ため、ビューをリサイクルしてインフレの数を最小限に抑えるメカニズムが存在します。それに加えて、ビュー ( findViewById()
) の検索も比較的遅いです。これを改善するには、ビューへの参照をViewHolder
メモリ内に保持するので、毎回検索する必要がありません。
このリンクが役立つと思います。getview は、Activity にリストビューを表示するときに自動的に呼び出されるコールバック関数です。リストビューを表示すると、getview をオーバーライドして XML から行を膨らませるか、行を動的に作成します。リストビューに表示されるビューとして返すその行。
独自のカスタム アダプタを作成する場合、getView() メソッドはどのように機能しますか?
行ごとに getview が 1 回呼び出されます。レイアウトを作成し、ビューとして返します。これらのそれぞれのビューは、リスビューの行に表示されます。
アクティビティ クラスからカスタム アダプタ クラスを呼び出しています。カスタマイズされたアダプタ クラスBaseAdapter
は、抽象クラスである を拡張します。抽象のメソッドは、拡張クラス ( 、 、 、 などのメソッド) によって使用されます。getView()
これらgetItemId()
のgetItem()
メソッドは使用しgetCount()
ないでください。カスタマイズされたアダプタ クラスを呼び出しているため、クラスから個別に呼び出す必要があります。