Понятно, что сохранение состояния checkbox происходит по position, а position в обоих случаях =1. Есть ли возможность обойти это препятствие?
|пункт 1 строка 1 position 1 checked
строка 2 position 2
строка 3 position 3
|пункт 2 строка 1 position 1 checked
строка 2 position 2
строка 3 position 3
Код: Выделить всё
// пункт списка
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// используем созданные, но не используемые view
View view = convertView;
if (view == null) {
view = lInflater.inflate(R.layout.childitem, parent, false);
}
Product p = getProduct(position);
// заполняем View в пункте списка данными из товаров: наименование, цена
// и картинка
((TextView) view.findViewById(R.id.tvDescr)).setText(p.name);
((TextView) view.findViewById(R.id.tvPrice)).setText(p.price + "");
((ImageView) view.findViewById(R.id.ivImage)).setImageResource(p.image);
CheckBox cbBuy = (CheckBox) view.findViewById(R.id.cbBox);
// пишем позицию
cbBuy.setTag(position);
// заполняем данными из товаров: в корзине или нет
cbBuy.setChecked(p.box);
// загружаем сохраненный checkbox
cbBuy.setChecked(load(position));
// присваиваем чекбоксу обработчик
cbBuy.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.d("Check", "Changing position to" + position + " " + isChecked);
mIsChecked[position] = isChecked;
savebox(position, isChecked);
// меняем данные товара (в корзине или нет)
getProduct((Integer) buttonView.getTag()).box = isChecked;
}
});
return view;
}