Я разрабатываю приложение, используя ListView с простым пользовательским адаптером, каждая строка содержит объект CheckBox. Однако из-за функции утилизации ListView (которую я не планирую отключать), когда проверяется какой-либо из ящиков, также проверяются другие элементы ниже или выше в ListView.Android checkbox Listview recycling вызывает неожиданную проверку коробки
Следующая моя GetView() адаптер, наряду с пользовательским классом ViewHolder:
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
LayoutInflater mInflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.populate_friends_row, null);
holder = new ViewHolder();
holder.nameCheckBox = (CheckBox) convertView.findViewById(R.id.isFriend);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.nameCheckBox.setText(data.get(position).contactLabel);
holder.nameCheckBox.setChecked(checked.get(position));
holder.nameCheckBox.setTag(String.valueOf(position)); // to properly track the actual position
holder.nameCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
int pos = Integer.parseInt(buttonView.getTag().toString());
checked.set(pos, isChecked);
}
});
return convertView;
}
public static class ViewHolder {
public CheckBox nameCheckBox;
}
Я уже держал проверенные коробки в ArrayList из булевы: проверено.
Любая помощь будет оценена, спасибо.
Есть ли конкретная причина, вы используете 'String' для тега CheckBox в вместо' Integer'? – frozenkoi