моя проблема заключается в том, что у меня есть список с флажками, видимость которых исчезает, когда выбрана кнопка очистки. checkboxes становятся видимыми. Я просматриваю состояния флажков, но проблема в том, что когда флажок установлен, он вызывает onCheckChange() и выполняет работу по настройке состояния, но когда мой просмотр повторяет его снова setChecked в состояния магазинов и снова вызывает мой onCheckChanged, и я не знаю, почему, когда я прокручивает резервную копию, он не восстанавливает мои проверенные состояния... это мой код
public View getView(int position,View convertView,ViewGroup parent)
{
final int currentPosition=position;
View row=convertView;
if(row==null)
{
LayoutInflater inflater=((Activity)context).getLayoutInflater();
row=inflater.inflate(layoutResourceId, parent,false);
holder=new Feedbacks();
holder.lvGuestName=(TextView)row.findViewById(R.id.guestName);
holder.checkBox=(CheckBox)row.findViewById(R.id.clearCheck);
row.setTag(holder);
}
else
{
holder=(Feedbacks)row.getTag();
}
if(showCheckbox)
{
holder.checkBox.setVisibility(View.VISIBLE);
}
else
{
holder.checkBox.setVisibility(View.GONE);
}
holder.lvGuestName.setText(feedbackList.get(position).getGuestName());
holder.checkBox.setChecked(checks.get(position));
holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if(isChecked)
{
checks.put(currentPosition, true);
}
else
{
checks.put(currentPosition, false);
}
}
});
return row;
}
Попробуйте использовать это.
holder.checkBox.setTag(position);
holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
Integer currentPosition = Integer.parseInt(buttonView.getTag().toString());
if(isChecked)
{
checks.put(currentPosition, true);
}
else
{
checks.put(currentPosition, false);
}
}
});
Также нет необходимости использовать новую строку "Просмотр". Повторно используйте convertView вместо строки и верните его. Вы теряете память, используя View здесь. Поэтому просто повторно используйте convertView.