【问题标题】:CheckBox in ListView setonclicklistener not working properlyListView setonclicklistener 中的 CheckBox 无法正常工作
【发布时间】:2012-11-22 09:25:42
【问题描述】:

我有一个 ListView 和一个 CheckBox 和一个 TextView 。在我的适配器getView() 方法中,我在复选框上实现了这个监听器。

holder.check.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            HashMap<String, String> localMap = (HashMap<String, String>) holder.check
                    .getTag();
            if (holder.check.isChecked()) {
                trackinglist.add(localMap.get("taskid"));
                checkedlist.add(localMap.get("taskid"));
            } else {
                if (trackinglist.contains(localMap.get("taskid"))) {
                    trackinglist.remove(localMap.get("taskid"));
                }
                if (alreadycheckedlist.contains(localMap.get("taskid"))) {
                    undonelist.add(localMap.get("taskid"));
                    alreadycheckedlist.remove(localMap.get("taskid"));
                } else {
                    checkedlist.remove(localMap.get("taskid"));
                }
            }

        }
    });

现在我的问题是 holder.check.isChecked() 总是返回 false 即使单击 CheckBox 并检查它。什么可能导致这种行为?是的,我不想使用 setoncheckchangelistener 。请帮忙。

【问题讨论】:

  • 你为什么不直接使用View v?
  • 我该怎么做?请给我一些例子。
  • @e7fendy 为什么这可能是问题?
  • 当点击时,你会得到被点击的视图。您可以检查 holder.check 是否与 v 相同。如果不是,则 holder.check 可能已经过去(由于方向等)。最好直接使用View v,或者findviewbyid。

标签: android listview checkbox onitemclicklistener ischecked


【解决方案1】:

你可以使用

holder.check.setOnCheckedChangeListener(new OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
    {
        if ( isChecked )
        {
            // perform logic
        }

    }
});

【讨论】:

  • 请阅读问题的最后一行。每次检查值更改时都会调用此方法。我希望仅在用户单击检查时触发它。
猜你喜欢
  • 2012-09-18
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
相关资源
最近更新 更多