これは、AndroidでのListViewsの予想される動作です。リスト内のビューにデータを入力するために基になるデータを使用する方法は、順調に進んでいます。
Androidは、リストビューを作成するときにビューのリサイクルと呼ばれる手法を使用します。これは、ビューにデータを入力する場合と比較して、ビューを膨らませるのは集中的な操作であるためです。Androidは、ユーザーが画面に表示するビューを作成するだけで、(プログラマーの助けを借りて)インフレを最小限に抑えます。ユーザーがリストを上にスクロールすると、画面から移動したビューがプールに配置され、表示されようとしている新しいアイテムで再利用されます。このプールからのビューはgetView
、2番目の引数としてに渡されます。このビューは、リストからポップされたときとまったく同じ状態を保持するため、getViewメソッドによって、古いデータの状態がすべて消去され、基になるデータの新しい状態に基づいて再入力されます。getView()
の実装が持つべき構造の例を次に示します。
@Override
public View getView (int position, View convertView, ViewGroup parent)
{
//The programmer has two responsibilities in this method.
//The first is to inflate the view, if it hasn't been
//convertView will contain a view from the aforementioned pool,
// but when first creating the list, the pool is empty and convertView will be null
if(convertView == null)
{
//If convertView is null, inflate it, something like this....
convertView = layoutInflator.inflate(R.layout.mylistview, null);
}
//If convertView was not null, it has previously been inflated by this method
//Now, you can use the position argument to find this view's data and populate it
//It is important in this step to reset the entire state of the view.
//If the view that was popped off the list had a checked CheckBox,
// it will still be selected, EditTexts will not be cleared, etc.
//Finally, once that configuration is done, return convertView
return convertView;
}
getItem()
リストの管理に役立ち、基になるデータの管理やgetViewType()
複数のビュータイプのリストなど、ビューのリサイクルを活用する巧妙な操作を可能にするAdapterクラスの他のメソッドも多数ありますgetViewTypeCount()
が、上記は基本的なものです。ビューをスムーズに実行するために必要なテクニックと最小限。
あなたは正しい方向に進んでいたようです。これがあなたの質問のいくつかに答えるのに役立つことを願っています。詳細について不明な点がありましたらお知らせください。