在ListView中禁用CheckBox的交互性

时间:2011-07-30 01:40:38

标签: android listview checkbox

我正在尝试使用ListView,其中每行都有一些文本和一个复选框。我知道这是一个已经解决的问题,但无论如何我都试图自己做,并且非常接近它的工作。

这是github上的演示应用。

单击复选框以外的任何位置的ListView项正确注册该复选框。单击该框不会导致OnItemClick事件,因此未选中已选中该框的事实。

我可以为每个复选框添加一个监听器,并在适配器内维护状态,这很好,但我需要有一些方法让HomeActivity知道列表是否有应用程序检查,何时不检查(启用/禁用一些按钮)。我正在考虑使用Callback,但我从来没有用Java做过。

解决此问题中的一些常见主题:

  • Checkbox有android:focusable和android:focusableInTouchMode都设置为false
  • 我在复选框上尝试了android:clickable =“false”但是从未调用过该列表的OnItemClick方法。
  • 我维护HashMap中复选框的状态,以便在重复使用视图时可以在适配器中正确设置它们。

3 个答案:

答案 0 :(得分:1)

禁用getView()方法中的复选框可点击

((CheckBox) result.findViewById(R.id.checkBox)).setClickable(false);

适合我。

答案 1 :(得分:0)

由于您已将checkbox focusable和focusableInTouchMode设置为false,因此不会获取任何事件。请参阅列表的单击侦听器或复选框的单击侦听器,您不能同时使用它们。

您可以做的是,在视图上的bindView中附加侦听器,也在复选框上附加。通过这种方式,当单击行或复选框时,您可以在HomeActivity中获取侦听器调用...

您可以为它创建界面..........

Public Interface MyClickListener{
    public void onClick();

}

创建对象MyClickListener对象;
object.onClick();

答案 2 :(得分:0)

这将获取列表视图中的所有视图,并在每个视图中显示该复选框,并在检查时将其添加到列表中:

List<CheckBox> listOfCheckboxes = new ArrayList<CheckBox>();
List<View> listOfViews = new ArrayList<View>();
listView1.reclaimViews(listOfViews);
for (View v : listOfViews)
{
    CheckBox cb = (CheckBox)v.findViewById(R.id.checkbox);
    if (cb.isChecked())
    {
        listOfCheckboxes.add(cb);
    }
}