私はそれを理解しました。アダプターがどのように起動したのか、そしてデータをどこから取得するのかをどのようにして知ったのか理解できませんでした。クラスを拡張したときBaseAdapter
、そのクラスのコンストラクターで、に表示したいアイテムのリストを初期化しましたListView
。しかし、これらの値がいつどのように使用されるのか理解できませんでした。
だからここにあるのです!!! :
オーバーライドするBaseAdapter
必要があるいくつかのメソッドがあります。これらの中には、がありgetCount()
ます。
が作成されると、それ以外の場合ListView
は、を呼び出しますgetCount()
。これが0以外の値を返す場合(コンストラクターで以前に初期化したArrayListのサイズを返しました)、getView()
画面をアイテムで埋めるのに十分な回数呼び出します。たとえばArrayList
、 20個のアイテムで初期化しました。最初は8つのアイテムしか画面に収まらなかったため、getView()
8回呼び出され、戻る必要のある位置を尋ねるたびに(より正確には、その特定の位置のリストで行がどのように表示されるか、どのデータかを知りたい)含む必要がありました)。リストを下にスクロールするgetView()
と、何度も何度も呼び出されます。'リストの最後に到達するまで、この場合は20アイテム/行です。
何notifyDataSetChanged()
が...呼び出されると、呼び出しの時点で画面に表示されている項目(より正確にはどの行のインデックス)を調べ、getView()
それらの位置で呼び出します。
つまり、リストの最初の8つのアイテムを表示していて(つまり、画面に表示されているアイテムです)、リストの2番目と3番目のアイテムの間に別のアイテムを追加して呼び出すとnotifyDataSetChanged()
、getView()
8回呼び出され、位置が開始されます。 0から7で終わり、getView()
データを取得するメソッドArrayList
では、前の8つのうち7つと一緒にリストに挿入された新しいアイテムが自動的に返されます(最後のアイテムが1つの位置に移動したため、8ではなく7)ダウンしているので、もう表示されません)、ListView
これらのアイテムで再描画などが行われます。
また、指定することが重要なのは、正しく実装するとgetView()
、(新しいアイテムを作成する代わりに)すでに表示されているアイテム(オブジェクト)をリサイクルすることになるということです。実装の正しい方法を確認するには、12:00頃にこのビデオを参照してくださいgetView()
LogCat
すべてのメソッドにを呼び出し、何が起こっているかを追跡することで、これらすべてを理解しました。
これが、sがどのように機能するかを理解し始めたばかりの人に役立つことを願っていますListView
。
PSこの例は、私が理解するのにも大いに役立ちました。
アップデート
今日ListViews
はもう実際には使われていません。AndroidRecyclerView
は、ビューのリサイクルを行うものを発表しましたが、の基本を知っていると、ListView
を理解するのに役立ちますRecyclerView
。
参考のためのリンクは次のとおりです:https ://developer.android.com/guide/topics/ui/layout/recyclerview