2016-08-08 4 views
0

Что-то странное происходит, когда я нажимаю на строку в списке, соответствующий флажок также выбран. Так что все правильно, но странно то, что автоматически каждые 7 строк checkbox setcheked to true. В чем проблема? Спасибо за вашу помощьAndroid listview getView checkBox

ListAdapter adapter = new ArrayAdapter<Dettaglio1> 
      (this, R.layout.deteails_list_pdf, R.id.tv_nome_categoria, dettagli1) { 
@Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 
      View row = super.getView(position, convertView, parent); 
... 
... 
list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
        final Dettaglio1 d1 = dettagli1.get(position); 

        d1.setChecked(!d1.isChecked()); 

        CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkBox2); 
        checkBox.setChecked(d1.isChecked()); 

       } 
      }); 
      return row; 
     } 
    }; 
    list.setAdapter(adapter); 

private class Dettaglio1 { 
    String nome; 

    private boolean isChecked; 

    public void setChecked(boolean isChecked) { 
     this.isChecked = isChecked; 
    } 

    public boolean isChecked() { 
     return isChecked; 
    } 
} 
+0

Можете ли вы разместить файл макета? – manfcas

ответ

1

То, что происходит, как известно, как вид утилизации - механизм ядра за ListView и RecyclerView. Проверяется каждый 7-й CheckBox, потому что это то же самое CheckBox переработано и отображено с его предыдущим состоянием.

Чтобы устранить проблему, вам необходимо сохранить состояние «проверено» в вашей модели данных (класс Dettaglio1). Например, вы можете изменить модель данных таким образом:

public class Dettaglio1 { 
    // stuff 
    private boolean isChecked; 

    public void setChecked(boolean isChecked) { 
     this.isChecked = isChecked; 
    } 

    public void isChecked() { 
     return isChecked; 
    } 
    // more stuff 
} 

и ваш слушатель, как так:

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    final Dettaglio1 d1 = dettagli1.get(position); 
    d1.setChecked(!d1.isChecked()); 

    CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkBox2); 
    checkBox.setChecked(d1.isChecked()); 
} 

Edit: Кроме того, необходимо переопределить getView() метод вашего адаптера и установите CheckBox в соответствии с Dettaglio1 в текущей позиции.

+0

Это решение не решает проблему. Я отредактировал мой пост – user2847219

+0

О, правильно. Отредактировал мой пост. – npace

Смежные вопросы