【问题标题】:Android Custom adapter with CheckBox: setOnClickListener or setOnCheckedChangeListener带有 CheckBox 的 Android 自定义适配器:setOnClickListener 或 setOnCheckedChangeListener
【发布时间】:2013-05-28 14:01:34
【问题描述】:

我有一个自定义适配器,布局中有一个复选框。我可以在 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 来简化代码

【问题讨论】:

  • 发布您的代码并清楚地描述您的问题
  • 你想做什么。单击复选框时是否需要获取元素
  • 我希望用户可以选择和取消选择元素
  • stackoverflow.com/questions/16685366/…。检查链接中的答案。用户可以选择取消选中复选框也可以检索选择的项目。
  • 谢谢,但我不想复制和粘贴示例。我想知道使用一个或另一个监听器的原因。类似于 Boli-CS 的答案。

标签: android checkbox android-arrayadapter


【解决方案1】:

在我看来,最好使用 setOnCheckedChangeListener。 setOnClickListener 只有在点击按钮时才会被调用,如果不点击就改变了复选框的状态,例如在代码中调用 setChecked(),setOnClickListener 不会被调用,但会调用 setOnCheckedChangeListener。

【讨论】:

    【解决方案2】:

    当您同时设置setOnCheckedChangeListenersetOnClickListener 事件时:

    1. 如果您滑动Switch,它将调用setOnCheckedChangeListener
    2. 如果您单击Switch,它将调用setOnCheckedChangeListenersetOnClickListener。在这种情况下,当第一个侦听器切换某个变量而第二个侦听器再次切换同一个变量时,您会得到一个奇怪的行为。

    所以,在所有情况下都使用setOnCheckedChangeListener 会更好。

    如果您在Switch 内有android:clickable="false",则没有setOnClickListener 将无法工作,因此您可以添加此空侦听器或删除android:clickable="false"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-07
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 2014-09-06
      • 2015-08-22
      • 1970-01-01
      相关资源
      最近更新 更多