getView () вызывается всякий раз, когда необходимо нарисовать ранее невидимый элемент списка. Так как вы воссоздаете itemChecked[]
каждый раз, когда вызывается этот метод, у вас не будет установлен новый флажок, а для каждого полученного представления будет свой массив (final в Java не делает это поле уникальным, как в C)
Самый простой способ решить эту проблему - сделать itemChecked
членом класса и установить / восстановить состояние флажка на его основе.
public class MyListAdapter extends ArrayAdapter<Object> {
private final boolean[] mCheckedState;
private final Context mContext;
public MyListAdapter(Context context, int resource, int textViewResourceId, List<Object> objects) {
super(context, resource, textViewResourceId, objects);
mCheckedState = new boolean[objects.size()];
mContext = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// simplified to just a Checkbox
// ViewHolder and OnCheckedChangeListener stuff left out
CheckBox result = (CheckBox)convertView;
if (result == null) {
result = new CheckBox(mContext);
}
result.setChecked(mCheckedState[position]);
return result;
}
}