У меня проблема с ListActivity. Я расширил ArrayAdapter и переопределил getView, чтобы заполнить данные для каждой строки. Я выбрасываю некоторые данные из ArrayList моего адаптера в TextView.
Моя проблема в том, что при прокрутке TextView каждой строки заполняется текстом, которого нет в соответствующих данных ArrayList. Я имею в виду: скажем, у меня есть строка вверху моего списка с TextView, который заполнен пустой строкой. Если я нахожусь в нижней части своего списка и вижу строку с TextView, заполненную «bob», и я щелкаю, чтобы прокрутить вверх, строка вверху может теперь иметь «bob» в его TextView, но данные в этот индекс моего ArrayList не содержит "bob." Содержит пустую строку (фактически ноль). Если я продолжу прокручивать вверх и вниз, другие строки будут заполняться (или стираться) данными, которые не соответствуют содержимому ArrayList адаптера.
Чтобы это произошло, мне не нужно быстро прокручивать ListView. Однако, чем быстрее я прокручиваю, тем больше перепутывается строк.
Вот мой код. Я понимаю, что использую findViewById каждый раз, когда вызывается getView, но это не относится к делу. Я называю это против 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;
}