Android: невыбранные проверенные элементы просмотра текста выбираются в ListView
Я создал ListView
с Arraylist
как показано ниже:
nAdapter=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_checked,nArrayList);
mListView.setAdapter(nAdapter);
тогда setOnItemClickListener():
mListView.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
if(((CheckedTextView) arg1).isChecked()){
((CheckedTextView)arg1).setChecked(false);
}else{
((CheckedTextView)arg1).setChecked(true);
}
}});
Проблема заключается в том, что, если я выберу элемент, каждый из 7 или 8 элементов (первый элемент не в текущем представлении, но просматриваемый при прокрутке вверх) также будет выбран вниз по списку. Это происходит из списка.
Может кто-нибудь объяснить, что здесь происходит?
1 ответ
Чтобы решить эту проблему, просто используйте:
mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
и удалите свой OnItemClickListener.
Android использует View переработку. Представьте себе ListView с 1000 строками: расточительно иметь уникальное представление для каждой строки, когда пользователь может видеть только несколько из них одновременно. Таким образом, адаптер разумно создает только достаточно уникальных представлений, которые являются видимыми (около 7 или 8 в вашем случае), и перерабатывает эти уникальные представления, чтобы показать все 1000 строк; создание более быстрого приложения.
Ошибочные галочки, которые вы видите в своих строках, происходят, когда "предыдущая" строка была отмечена, но не очищена после того, как строка была переработана и заполнена "новыми" данными.
Надеюсь, что это имеет смысл, в противном случае посмотрите, как Ромэн Гай из Android обсуждает это явление здесь.