Tôi có một ListView rằng bằng cách sử dụng một ArrayAdapter là dân cư từ cách nhìn xml phụ nhỏ. mỗi khung nhìn nhỏ chỉ có hai thứ bên trong, một hộp kiểm và một nhãn chuỗi bên cạnh nó.
tôi muốn đặt người nghe onCheckedChanged để nắm bắt sự kiện của người dùng kiểm tra hoặc bỏ chọn hộp kiểm.
ví dụ người nghe đưa ra ở đây:
listView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
Toast.makeText(this, "box has been checked", Toast.LENGTH_SHORT).show();
}
}
nơi nào tôi đặt mã người nghe? và làm cách nào để thiết lập?
mã cho 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;
}
}
tôi không nghĩ rằng việc này vì quan điểm listview tái chế. Khi bạn cuộn xuống và một convertView đã chọn được tái chế, hàng đã chọn sẽ bị bỏ chọn. Làm thế nào để bạn có được xung quanh này? –
Đây là hành vi đúng. Khi Chế độ xem được sử dụng lại, tất cả các trẻ em trong chế độ xem con của nó đều có đặc điểm của chế độ xem vô nghĩa đã được tái chế. Do đó, bạn phải cập nhật tất cả các khung nhìn và các thuộc tính của chúng trong 'getView()' mỗi lần. Điều này bao gồm thiết lập giá trị CheckBox cũng như 'OnClickListener' của nó. Tóm lại, giữ người nghe và thêm 'checkBox.setChecked()' để đặt giá trị đó thành giá trị mong đợi trong trường hợp chế độ xem được tái chế (hoặc mới) có cài đặt khác. –