ListActivity に問題があります。ArrayAdapter と Overridden getView を拡張して、各行のデータを入力しました。Adapter の ArrayList から TextView にいくつかのデータをスローします。
私の問題は、スクロールすると、各行の TextView に、ArrayList の対応するデータにないテキストが入力されることです。つまり、リストの一番上に、空の文字列が入力された TextView を含む行があるとします。リストの一番下にいて、TextView に "bob" が入力された行が表示されている場合、フリックして一番上までスクロールすると、一番上の行の TextView に "bob" が含まれている可能性がありますが、私のArrayListのそのインデックスには「bob」が含まれていません。空の文字列 (実際には null) が含まれています。上下にスクロールし続けると、アダプターの ArrayList の内容に対応しないデータが他の行に入力 (または消去) されます。
これを実現するために、ListView を高速にスクロールする必要はありません。ただし、スクロールが速いほど、行がめちゃくちゃになるようです。
これが私のコードです。getView が呼び出されるたびに findViewById を使用していることに気付きましたが、それは問題ではありません。convertView に対して呼び出しています。各行で正しい TextView を取得する必要がありますね。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// get the View for this list item
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.layout_mylistlist_item, null);
}
// get the next object
MyListItem myItem = m_items.get(position);
// set up the list item
if (myItem != null) {
TextView txtName = (TextView) v.findViewById(R.id.mylist_name);
// set text
if (txtName != null && myItem.getName() != null) {
txtName.setText(myItem.getName());
}
}
// return the created view
return v;
}