这是对处理列表视图中 onItemClick 事件中的视图的最佳实践的请求。
我的 ListView 中的每个视图都包含一个 ImageView、一些 TextView 和一个包装在 RelativeLayout 中的复选框。在任何地方选择的项目视图上,我希望根据需要勾选/取消选中复选框。我还希望可以选择更改视图样式,即通过为笔触着色来突出显示该项目。
我目前的问题与其他这样做的人相似。由于 ListView 回收,如果我抓取传递到 onItemClick 的视图并设置背景资源或复选框选中值,它也会为当前未呈现的视图更改它们。我想知道实现这一目标的最佳方法。
我知道有一种模式可以通过实现 onClickListener 直接处理 ArrayAdapter 中的 CheckBox 事件,但我相信这只会响应直接选择 CheckBox;它将忽略对视图其余部分的任何单击。另外,如果触发了复选框onClick事件,它将消耗单击事件,因此onItemClick不会触发,我需要设置数据。
此外,使用 CheckedTextView 将不起作用,因为它位于 RelativeLayout 中,这不会将 checked 事件传递给 ListView。有一篇文章建议创建自己的CheckedViewLayout,实现Checkable来处理View checked事件。如果我继续这样做,我是否能够在 xml 中引用我的新布局类,或者我是否必须再次设计我的每个视图,但使用 Java 代码?
如果其他人有更好的解决方案,请告诉我。
我认为这个链接可能对你有用,有一个细节给你
Android ListView 复选框示例 - OnItemClickListener(( 和 OnClickListener((
最后,我创建了自己的 CheckableRelativeLayout,实现了 Checkable,并将其用作每个 ListView 项的主容器。我在 CheckableRelativeLayout 中使用了一个布尔值来跟踪视图是否被单击。
如果需要,我可以发布最终课程。