У меня есть ListView, что путем к ArrayAdapter заполняются мелкими видами XML подразделов. каждый маленький вид имеет только две вещи внутри, флажок и строковый ярлык рядом с ним.
Я хочу установить прослушиватель onCheckedChanged, чтобы зафиксировать событие, когда пользователь проверяет или снимает флажки.
, например слушатель показано здесь:
listView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
Toast.makeText(this, "box has been checked", Toast.LENGTH_SHORT).show();
}
}
где нужно поместить код слушателя? и как мне настроить его?
код ArrayAdapter:
public class MobileArrayAdapter extends ArrayAdapter<CheckBoxInfo>{
CheckBoxInfo[] objects;
Context context;
int textViewResourceId;
public MobileArrayAdapter(Context context, int textViewResourceId,
CheckBoxInfo[] objects) {
super(context, textViewResourceId, objects);
this.context = context;
this.textViewResourceId = textViewResourceId;
this.objects = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row_layout_view = convertView;
if ((row_layout_view == null)){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row_layout_view = inflater.inflate(R.layout.row_layout, null);
}
//CheckBoxInfo item = objects.get(position); // for arrayList
CheckBoxInfo item = objects[position];
if(item != null){
TextView textView = (TextView) row_layout_view.findViewById(R.id.textView1);
CheckBox checkBox = (CheckBox) row_layout_view.findViewById(R.id.checkBox1);
if(item !=null){
textView.setText(item.checkBoxName);
checkBox.setChecked(item.checkBoxState);
}
}
return row_layout_view;
}
}
Я не думаю, что это работает, потому просмотров переработки ListView. Когда вы прокручиваете вниз, и выбранный convertView перерабатывается, проверенная строка становится неконтролируемой. Как вам обойти это? –
Это правильное поведение. Когда View снова используется, все его дочерние объекты имеют характеристики бессмысленного представления, которое было переработано. Поэтому вы должны обновлять все представления и их атрибуты в 'getView()' каждый раз. Сюда входит установка значения CheckBox, а также его 'OnClickListener'. В общем, держите слушателя и добавьте 'checkBox.setChecked()', чтобы установить его на ожидаемое значение, в случае, если переработанное (или новое) представление имеет другую настройку. –