自定义列表单击复选框

Posted

技术标签:

【中文标题】自定义列表单击复选框【英文标题】:Custom list clicking with checkboxes 【发布时间】:2010-10-28 01:50:47 【问题描述】:

我使用SimpleCursorAdapterCursor 填充了ListActivity,当其中一个列表项被单击时,它会启动另一个活动。我还使用ViewBinder 对数据进行一些自定义转换。

我想为列表中的每一行添加一个CheckBox,因此我更改了视图并添加了一个CheckBox,重力正确。

添加CheckBox 删除了点击项目的能力。当您按下列表项时,不再调用我在 ListActivity 中覆盖的 onListItemClick 方法。删除 CheckBox 可以解决此问题。这是为什么呢?

另外,如果单击列表项的主要部分但在选中项目中的CheckBox 时具有附加功能,我如何设置列表以便它继续执行我所需的功能?设置onCheckedChangedListener 会起作用,还是会为列表中的每个项目重复使用相同的视图实例?

【问题讨论】:

【参考方案1】:

正如here 所解释的,点击监听器仅在没有其他视图为focusable 时才起作用。将您的 CheckBox 设置为 focusable="false" 应该可以解决问题:

<CheckBox android:focusable="false" />

【讨论】:

【参考方案2】:

看起来SimpleCursorAdapter 对于我想要实现的目标来说太原始​​了。 我已经切换到实现CursorAdapter 并在我的newView 方法的实现中使用LayoutInflater 返回一个新视图。

  public View newView(Context context, Cursor cursor, ViewGroup parent) 
    return LayoutInflater.from(context).inflate(R.layout.alarm_row, parent, false);
  

在 bindView 中,我将自定义 OnClickListener 设置为我的主 LinearLayout,然后将另一个 OnCheckedChangeListener 设置为 CheckBox

为了让这一切看起来正确,我必须将 LinearLayout 的背景设置为 android 的 menuitem drawable:

android:background="@android:drawable/menuitem_background"

【讨论】:

以上是关于自定义列表单击复选框的主要内容,如果未能解决你的问题,请参考以下文章

自定义复选框

用于单击复选框的 Kendo MVVM 自定义绑定

如何使整行列表视图可点击?

Android中项目的自定义ListView点击问题

如何在android中使用复选框创建自定义日志列表

Android:需要在自定义适配器列表视图中保存复选框状态