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 обсуждает это явление здесь.

Другие вопросы по тегам