【发布时间】:2019-08-13 16:40:05
【问题描述】:
我使用自定义适配器创建了一个列表视图。对于数组列表/列表视图中的每个项目,项目旁边都有一个复选框。
如果单击它们,我基本上想将数组列表中对象的值设置为true。
查看了isChecked() 方法但是当我的布局中只有一个复选框时,我无法理解它如何检查列表中每个项目的每个复选框
我有相当多的 Java 知识,但尝试将我在那里创建的代码转移到一个可行的应用程序中被证明是困难的。
【问题讨论】:
我使用自定义适配器创建了一个列表视图。对于数组列表/列表视图中的每个项目,项目旁边都有一个复选框。
如果单击它们,我基本上想将数组列表中对象的值设置为true。
查看了isChecked() 方法但是当我的布局中只有一个复选框时,我无法理解它如何检查列表中每个项目的每个复选框
我有相当多的 Java 知识,但尝试将我在那里创建的代码转移到一个可行的应用程序中被证明是困难的。
【问题讨论】:
附上你的实现会有所帮助,但这里是一般的想法:
您的 ListView(希望是 RecyclerView,但不是强制性的)包含有关如何在为其提供燃料的数据列表中布置特定项目的逻辑。这些可重用的布局和 UI 组件在 ViewHolder 模式中维护(这解释了布局中的单个复选框,但如果您的列表中有 10 个项目,您会在屏幕上看到 10)。在每个 ViewHolder 中,您都可以访问其各自的 CheckBox,因此您可以在 CheckBox 上设置一个侦听器以订阅其状态更改(选中或未选中)。在侦听器内部,您可以调用函数来更新列表中的元素。 ViewHolders 内部有一个很好的变量,称为adapterPosition,您可能已经猜到,它是 VH 在适配器中的位置(从零开始)。这通常非常有用,因为您可以传递此变量或直接使用索引引用您的列表,它会匹配您列表中的正确项目。
希望这会有所帮助,如果您提供一些代码示例,我将非常乐意为您提供实施帮助!
【讨论】:
您可以在适配器中使用的模型类中添加一个布尔参数,即 isSelected。 为复选框添加监听器
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//update isChecked value to model class of list at current position
list.get(position).setChecked(isChecked);
}
});
然后您就可以轻松地从适配器的数据列表中获取选中的项目了。
【讨论】: