0

У меня есть собственный ListViewAdapter с ImageView, TextView и CheckBox.Android Checkbox в ListView Adapter, который не установлен после прокрутки

Когда я выбираю конкретный checkbox и прокручиваю вниз, после прокрутки назад checkBox получает флажок.
Я пробовал несколько ответов, но ничего не работает.

Вот мой код:

public class ListViewAdapterDrawer extends ArrayAdapter<String> { 

    ImageView imageViewSensor; 
    TextView textViewSensor, textViewLogging; 
    CheckBox checkBoxSensor; 
    private boolean[] itemChecked; 
    int count; 

    public ListViewAdapterDrawer(Context context, String[] sensorArray) { 
     super(context, R.layout.adapter_listview_drawer, sensorArray); 
     itemChecked = new boolean[sensorArray.length]; 
     for (int i = 0; i < this.getCount(); i++) { 
      itemChecked[i] = false; 
     } 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 

     if (convertView == null) { 
      LayoutInflater inflater = LayoutInflater.from(getContext()); 

      convertView = inflater.inflate(R.layout.adapter_listview_drawer, parent, false);  
     } 
     imageViewSensor = (ImageView) convertView.findViewById(R.id.imageViewSensor); 
     textViewSensor = (TextView) convertView.findViewById(R.id.textViewSensor); 
     checkBoxSensor = (CheckBox) convertView.findViewById(R.id.checkBoxSensor); 

     checkBoxSensor.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (checkBoxSensor.isChecked()){ 
        itemChecked[position] = true; 
       }else { 
        itemChecked[position] = false; 
       } 
      } 
     }); 

     checkBoxSensor.setChecked(itemChecked[position]);    
     return convertView; 
    } 
} 

ответ

2

Если вы читаете этот link о том, как ListView получает переработан, т.е. механизм рециркуляции, вы должны быть в состоянии понять, почему ваши флажки получить невыбранные.

This дает довольно подробное объяснение о ListView.

Ключевые моменты:

  • ListView перерабатывает без видимых видом называемые «ScrapViews» в исходном коде Android, как вы панорамирование.
  • В ListView используется просмотрщик повторного использования, чтобы добавлять повторные просмотры ниже или выше текущего окна просмотра и перемещать активные виды в повторно используемый пул, когда они перемещаются за пределы экрана во время прокрутки.
0

Попробуйте использовать HashMap для поддержания состояния флажка, поскольку ListView перерабатывает ту же точку зрения, когда ListView прокручивается

HashMap<Integer, CoreQuestion.SubSection> selectionMap = new HashMap<>(); 

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 

     if (convertView == null) { 
      LayoutInflater inflater = LayoutInflater.from(getContext()); 

      convertView = inflater.inflate(R.layout.adapter_listview_drawer, parent, false);  
     } 
     imageViewSensor = (ImageView) convertView.findViewById(R.id.imageViewSensor); 
     textViewSensor = (TextView) convertView.findViewById(R.id.textViewSensor); 
     checkBoxSensor = (CheckBox) convertView.findViewById(R.id.checkBoxSensor); 

     checkBoxSensor.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (checkBoxSensor.isChecked()){ 
        itemChecked[position] = true; 
        selectionMap.put(position,"true") 
       }else { 
        itemChecked[position] = false; 
        selectionMap.put(position,"false") 
       } 

      } 
     }); 
     if(selectionMap.get(posotion)!=null) 
     { 
       checkBoxSensor.setChecked(itemChecked[position]); 

     }    
     return convertView; 
    } 
} 

может это поможет.

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