how to add a listener for checkboxes in an adapter view, Android, ArrayAdapter, onCheckedChanged, OnCheckedChangeListener
adapter, android, android-arrayadapter, listener, oncheckedchanged
Solution
Do not use your example `listView.setOnCheckedChangeListener` or `onCheckedChanged` code.
First of all, for `CheckBox`, you should use `setOnClickListener()` instead of `setOnCheckedChangeListener()`. You can get the checked state inside of the `onClick()` function.
Second, place your `setOnClickListener()` inside of the `getView()` function of the list adapter.
Example:
checkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
final boolean isChecked = checkBox.isChecked();
// Do something here.
}
});
Problem
I have a listView that by way of an ArrayAdapter is populated by small xml sub views. each small view only has two things inside, a checkbox and a string label next to it. i want to set an onCheckedChanged listener to capture the event of the user checking or unchecking the checkboxes. for example the listener shown here: ``` listView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { Toast.makeText(this, "box has been checked", Toast.LENGTH_SHORT).show(); } ``` } where do I put the listener code? and how do I set it up? code for the 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; } } ```