2011-07-30 59 views
0

我想让ListView的每一行都有一些文本和一个复选框。我知道这是一个解决的问题,但我试图自己做,无论如何我都非常接近它的工作。禁用ListView中CheckBox的交互操作

这是我的演示应用程序github

单击除复选框外的其他任何位置的ListView项目都会正确注册该框已被选中。单击该框不会导致OnItemClick事件,因此检查框未被注册。

我可以添加一个侦听器到每个复选框,并保持适配器内部的状态,这将是很好的,但我需要有一些方法让HomeActivity知道列表何时检查应用程序,何时不检查启用/禁用某些按钮)。我正在考虑使用回调,但我从来没有用Java做过。

为了解决一些共同的话题在这个问题:

  • 复选框有机器人:可聚焦和android:focusableInTouchMode都设置为false
  • 我想机器人:可点击=“假”的复选框,但随后用于列表的OnItemClick方法从未被调用过。
  • 我在HashMap中维护复选框的状态,以便在重用视图时可以在适配器中正确设置它们。
+0

我很难理解你的问题是什么。你想要达到什么目的? –

+0

我想获得一个listview列表中的每个项目都有一个复选框。我需要能够统计检查项目的数量,然后按位置或ID获取它们的列表。 – Derek

回答

0

由于您将复选框focusable和focusableInTouchMode设置为false,它将不会获得任何事件。请参阅单击的监听器将工作或复选框,您不能让他们两个同时工作。

你可以做的是,将监听器附加在视图上的bindView上,也可以放在复选框上。通过这种方式,你可以得到在HomeActivity监听通话被点击行或复选框时...

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

Public Interface MyClickListener{ 
    public void onClick(); 

}

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

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); 
    } 
} 
0

禁用getView()方法

内复选框点击
((CheckBox) result.findViewById(R.id.checkBox)).setClickable(false); 

适合我。