大概有两种方法可以在ListView中使用CheckBox;
一种是对一个ListView里的项的数据进行处理,二是对ListView进行处理。
现在先对这两的第二种进行讨论。
ListView里面有一个方法叫作:setItemChecked这个就是将这个item设置选中或不选中的状态,如果你设置了一个监听:onItemClick然后在里面对这个赋值,且log记录,就会看到当你点击项时,这个值会是true/false间变化,但是可惜,视图却看不到变化。于是利用这个性质,加入一个CheckBox就可以了。
先定义一个ListView:
<ListView
android:id="@+id/chk_listview"
android:cacheColorHint="#00000000" android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
一个简单的布局文件,然后就是一个Adapter:
写一个继承BaseAdapter的子类:
在getView里
Item item;
if (contentView == null) {
final LayoutInflater inflater = LayoutInflater.from(getApplicationContext());
contentView = inflater.inflate(R.layout.list_item, null);
Item = new Item();
return convertView;
然后就是list_item这个布局文件了
<com.test.CheckLinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/test_chk" android:clickable="false"
android:focusable="false" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
<TextView
android:id="test"
android:layout_width="wrap_content" android:layout_height="wrap_content"/>
</com.test.CheckLinearLayout>
然后写一个自定义的
CheckLinearLayout:
extends LinearLayout implements Checkable {
public static final String TAG="CheckLinearLayout";
private CheckBox checkbox;
public CheckLinearLayout(Context context) {
super(context);
}
public CheckLinearLayout(Context context, AttributeSet set) {
super(context, set);
}
@Override
public boolean isChecked() {
return getCheckBox().isChecked();
}
@Override
public void setChecked(boolean checked) {
getCheckBox().setChecked(checked);
}
@Override
public void toggle() {
CheckBox mChecked = getCheckBox();
boolean checked=mChecked.isChecked();
setChecked(!checked);
}
private CheckBox getCheckBox() {
if (checkbox == null) {
checkbox = (CheckBox) findViewById(R.id.pancheckbox);
}
return checkbox;
}
一些准备工作都完 ,布局文件,自定义的CheckBox,剩下的就是在Activity里处理选中与取消选中状态了:
重要的是ListView需要监听:
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long id) {
CheckLinearLayout chkLinearLayout = (CheckLinearLayout) view;
CheckBox mCheckBox = (CheckBox) ((LinearLayout) view).getChildAt(0);
if (!mCheckBox.isChecked()) {
if (!checkPosList.contains(new Integer(pos))) {
checkPosList.add(new Integer(pos));
}
} else {
if (checkPosList.contains(new Integer(pos))) {
checkPosList.remove(new Integer(pos));
}
}
}
checkPosList这个是一个列表,存着你选中的项的位置,不能存id,在这里id总是为0.。。。
private ArrayList<Integer> checkPosList = new ArrayList<Integer>();;需要注意的是Integer与int的区别,如果上面 checkPosList.remove((pos));会出错,它会认为你移除指定位置的项,但是如果这个列表为空时,会溢出。
这时就可以处理列表点击选中与取消选中操作了。
在下面的图checkboxlist-001.png看到效果
而选中与未选中可能太简单了,通常可能会需要处理全选与取消全选,虽然上央选中后遍历checkPosList得到选中的结果,但是不能处理全选。
这个问题下一篇blog中介绍。
- 大小: 39.6 KB
分享到:
相关推荐
CheckBox+ListView混合使用,并缓存CheckBox+ListView混合使用,并缓存CheckBox+ListView混合使用,并缓存CheckBox+ListView混合使用,并缓存CheckBox+ListView混合使用,并缓存CheckBox+ListView混合使用,并缓存...
1、ListView item中加入checkbox后onListItemClick 事件无法触发。 原因:checkbox的优先级高于ListItem于是屏蔽了ListItem的单击事件。 解决方案:设置checkbox的android:focusable="false" 2、选择其中的...
在这里,我们将使用一个 trick,即在 ListView 的 onItemClick 事件中,我们将检查当前点击的是 ListView 的子项还是 CheckBox。如果是 ListView 的子项,我们将显示该子项的内容;如果是 CheckBox,我们将改变该 ...
在实际开发中,我们可能需要对ListView进行自定义,比如添加多列并支持CheckBox复选功能,同时还要实现数据的编辑功能。下面我们将详细探讨如何在C#中创建一个完美可编辑且包含CheckBox的多列ListView。 首先,我们...
在实际的应用场景中,我们经常需要在ListView中添加可选的复选框(CheckBox)列,以便用户能够选择一个或多个项目。本文将详细探讨如何在WPF的ListView中实现这一功能。 首先,我们需要理解WPF中的数据绑定机制。在...
综上所述,要在Android的ListView中使用Checkbox,我们需要创建自定义Adapter,设计Checkbox的布局,管理复选状态,监听并处理用户操作,同时注意性能优化和状态恢复。在实际项目中,这样的实现方式能够提供灵活的...
为了增加用户交互性,我们经常会在ListView的每一项中添加CheckBox,这样用户就可以进行多选操作。本篇文章将详细讲解如何在ListView中实现CheckBox复选框的功能。 首先,我们需要创建一个自定义的ListView适配器。...
在许多场景下,我们需要在ListView中加入复选框(CheckBox),实现多选、全选和反选的功能,例如在选择联系人、设置菜单等场景。这个“带CheckBox的listView”项目就是为了解决这类需求而设计的,并且已经解决了常见...
CheckBoxListView是一种特定实现的列表视图,它在Android开发中被用于展示一系列可选择的项目。这个组件在设计时特别考虑了用户体验,确保用户在浏览列表时,每次只能选择一个条目的CheckBox,防止多选冲突,并且...
### 如何使用LISTVIEW虚拟模式和Checkbox #### 一、使用虚拟模式 ##### 1. 在使用之前进行设置 为了启用虚拟模式,我们有两种方法来设置`ListView`控件: - **通过属性设置**:在控件的属性窗口中找到“行为”...
- 在XML布局文件中,将CheckBox作为ListView子项的一部分进行定义,并设置其id以便在代码中引用。 3. **自定义Adapter**: - 为了使CheckBox与ListView的数据项关联,需要创建自定义Adapter。在自定义Adapter中,...
在许多场景下,我们需要在ListView中集成复选框(Checkbox),以便用户能够进行多选操作,比如选择联系人、选择文件等。"pb带checkbox的listview的特殊效果"这个主题,就是关于如何在ListView中添加并定制带有复选框...
在实际项目中,我们经常需要实现一个功能,即在ListView中加入CheckBox,让用户能够通过一个主CheckBox来控制所有子项CheckBox的选择状态,这就是所谓的全选/反选联动。在本文中,我们将深入探讨如何在WPF的MVVM...
在这个例子中,`ListView1ItemClick`事件处理器首先遍历ListView的所有项,如果某项已被选中且不是当前点击的项,则取消其选中状态。最后,将当前点击的项设置为选中状态,实现了单选效果。 为了测试这个功能,你...
而“带checkbox的listview”是指在每个ListView的列表项中嵌入复选框(Checkbox),以供用户进行多选操作,如选择、勾选等。这种设计常见于需要用户选择多个项目的场景,如设置菜单、联系人选择等。 ### 1. ...
在`getView()`中,使用`findViewById()`找到XML布局中的CheckBox和TextView,然后将数据模型的值绑定到这些视图上。 9. **刷新视图** 当数据源发生变化时,如添加、删除或修改数据,需要调用Adapter的`...
当我们在ListView中添加了CheckBox复选框功能时,可能需要获取被选中的项的索引值,以便进行进一步的操作,比如处理用户的选择或者更新数据库。本文将详细介绍如何在C#中获取ListView中CheckBox的索引值。 首先,...
2. **ViewHolder**:在getView()方法中使用ViewHolder模式,这样可以快速找到CheckBox并减少查找视图的时间。ViewHolder应该包含CheckBox引用,以便于更新状态。 3. **数据绑定**:在getView()方法中,根据当前项的...
本篇文章将深入探讨如何在ListView中实现CheckBox的多选功能,并使用ViewHolder和ConvertView优化性能。 1. **ListView与Adapter基础** - ListView是Android中用于显示长列表的视图,它可以动态加载和回收视图,以...