自定义列表单击复选框

发布于 2024-07-21 12:58:11 字数 576 浏览 6 评论 0原文

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

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

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

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

I've populated a ListActivity from a Cursor using SimpleCursorAdapter that starts another activity when one of the list items have been clicked. I'm also using ViewBinder to do some custom transformation of the data.

I want to add a CheckBox to each row in the list so I've changed the view and added a CheckBox with gravity right.

Adding the CheckBox has removed the ability to click on the items. The onListItemClick method I was overriding in ListActivity is no longer called when you press on a list item. Removing the CheckBox fixes this. Why is this?

Also, how can I set up the list so that it continues to perform my required functionality if the main part of the list item is clicked but have additional functionality when the CheckBox in the item is checked? Will setting a onCheckedChangedListener work or is the same view instance reused for each item in the list?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

时间海 2024-07-28 12:58:11

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

<CheckBox android:focusable="false" />

As explained here, the click listener only works if no other view is focusable. Setting your CheckBox to focusable="false" should do the trick:

<CheckBox android:focusable="false" />
你又不是我 2024-07-28 12:58:11

看起来 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 的可绘制菜单项:

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

Looks like SimpleCursorAdapter is too primitive for what I wanted to achieve.
I've switched to implementing CursorAdapter and returning a new view using the LayoutInflater in my implementation of the newView method.

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

In bindView I then set a custom OnClickListener to my main LinearLayout and then another OnCheckedChangeListener to the CheckBox.

For all this to look right I had to set the LinearLayout's background to android's menuitem drawable:

android:background="@android:drawable/menuitem_background"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文