其他分享
首页 > 其他分享> > 带有CheckBox的Android自定义适配器:setOnClickListener或setOnCheckedChangeListener

带有CheckBox的Android自定义适配器:setOnClickListener或setOnCheckedChangeListener

作者:互联网

我有一个自定义适配器,在布局中带有一个复选框.我可以在CheckBox上使用setOnClickListener而不出现问题吗?还是最好使用setOnCheckedChangeListener?

编码:

public class MyAdapter extends ArrayAdapter<Object> {
private Context context;
private LayoutInflater mInflater;
private boolean[] selected;

public MyAdaptader(Context context, List<Object> list) {
    super(context, 0, list);
    this.context = context;
    mInflater = LayoutInflater.from(context);
    selected = new boolean[list.size()];
}

private OnClickListener pressed= new OnClickListener() {
    @Override
    public void onClick(View v) {
        if (((CheckBox) v).isChecked())
            selected[(Integer)v.getTag()] = true;
        else
            selected[(Integer)v.getTag()] = false;
    }
};

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.fila, null);
    }
    TextView txtName=convertView.findViewById(R.id.name);
    CheckBox chkSelected = (CheckBox) convertView.findViewById(R.id.selected);
    chkSelected.setTag(position);
    txtName.setText(getItem(position).toString());
    chkSelected.setChecked(selected[position]);
    chkSelected.setOnClickListener(pressed);
    return convertView;
}

}

我使用onClick并似乎可以工作,但是onCheckedListener更好吗?

P.D .:没有ViewHolder可以简化代码

解决方法:

我认为,最好使用setOnCheckedChangeListener.仅当您单击按钮时才会调用setOnClickListener,如果您更改复选框的状态而不单击,例如,在代码中调用setChecked(),则不会调用setOnClickListener而是会调用setOnCheckedChangeListener.

标签:android-arrayadapter,android,checkbox
来源: https://codeday.me/bug/20191123/2066099.html