我正在尝试使用ListView,其中每行都有一些文本和一个复选框。我知道这是一个已经解决的问题,但无论如何我都试图自己做,并且非常接近它的工作。
这是github上的演示应用。
单击复选框以外的任何位置的ListView项正确注册该复选框。单击该框不会导致OnItemClick事件,因此未选中已选中该框的事实。
我可以为每个复选框添加一个监听器,并在适配器内维护状态,这很好,但我需要有一些方法让HomeActivity知道列表是否有应用程序检查,何时不检查(启用/禁用一些按钮)。我正在考虑使用Callback,但我从来没有用Java做过。
解决此问题中的一些常见主题:
答案 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);
}
}