Android中ListView绑定CheckBox实现全选增加和删除功能(DEMO)_Android

ListView控件还是挺复杂的,也是项目中应该算是比较常用的了,所以写了一个小Demo来讲讲,主要是自定义adapter的用法,加了很多的判断等等等等….我们先来看看实现的效果吧!

好的,我们新建一个项目LvCheckBox

我们事先先把这两个布局写好吧,一个是主布局,还有一个listview的item.xml,相信不用多说

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#238286" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="ListView绑定CheckBox"
android:textColor="#fff" />
<TextView
android:id="@+id/tv_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="17dp"
android:text="增加"
android:textColor="#fff" />
</RelativeLayout>
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >
</ListView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal" >
<Button
android:id="@+id/btn_detele"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="1dp"
android:layout_weight="1"
android:background="#238286"
android:text="删除"
android:textColor="#fff" />
<Button
android:id="@+id/btn_select_all"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="1dp"
android:layout_weight="1"
android:background="#238286"
android:text="全选"
android:textColor="#fff" />
</LinearLayout>
</LinearLayout>

item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:orientation="horizontal" >
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_weight="7"
android:text="text" />
<CheckBox
android:id="@+id/cbCheckBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>

item.xml只有两个控件,很好理解吧

初始化控件

我们用initView()方法来初始化这些控件

private void initView() {
tv_add = (TextView) findViewById(R.id.tv_add);
tv_add.setOnClickListener(this);
btn_detele = (Button) findViewById(R.id.btn_detele);
btn_detele.setOnClickListener(this);
btn_select_all = (Button) findViewById(R.id.btn_select_all);
btn_select_all.setOnClickListener(this);
listview = (ListView) findViewById(R.id.listview);
}

然后继承点击事件,button的和listview的

implements OnClickListener,OnItemClickListener

自定义Adapter

这里最难的就是adapter了

1.Bean

我们为了数据的记录方便,我们提前写一个实体类

package com.lgl.lvcheckbox;
public class Bean {
private String title;
// 构造方法
public Bean(String title) {
super();
this.title = title;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}

ListAdapter

这里所有的都写了注释,也方便大家看清

package com.lgl.lvcheckbox;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.TextView;
/**
* 自定义适配器
*
* @author LGL
*
*/
public class ListAdapter extends BaseAdapter {
// 数据集
private List<Bean> list = new ArrayList<Bean>();
// 上下文
private Context mContext;
// 存储勾选框状态的map集合
private Map<Integer, Boolean> isCheck = new HashMap<Integer, Boolean>();
// 构造方法
public ListAdapter(Context mContext) {
super();
this.mContext = mContext;
// 默认为不选中
initCheck(false);
}
// 初始化map集合
public void initCheck(boolean flag) {
// map集合的数量和list的数量是一致的
for (int i = 0; i < list.size(); i++) {
// 设置默认的显示
isCheck.put(i, flag);
}
}
// 设置数据
public void setData(List<Bean> data) {
this.list = data;
}
// 添加数据
public void addData(Bean bean) {
// 下标 数据
list.add(0, bean);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
// 如果为null就返回一个0
return list != null ? list.size() : 0;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
View view = null;
// 判断是不是第一次进来
if (convertView == null) {
view = LayoutInflater.from(mContext).inflate(R.layout.item, null);
viewHolder = new ViewHolder();
viewHolder.title = (TextView) view.findViewById(R.id.tvTitle);
viewHolder.cbCheckBox = (CheckBox) view
.findViewById(R.id.cbCheckBox);
// 标记,可以复用
view.setTag(viewHolder);
} else {
view = convertView;
// 直接拿过来用
viewHolder = (ViewHolder) view.getTag();
}
// 拿到对象
Bean bean = list.get(position);
// 填充数据
viewHolder.title.setText(bean.getTitle().toString());
// 勾选框的点击事件
viewHolder.cbCheckBox
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// 用map集合保存
isCheck.put(position, isChecked);
}
});
// 设置状态
if (isCheck.get(position) == null) {
isCheck.put(position, false);
}
viewHolder.cbCheckBox.setChecked(isCheck.get(position));
return view;
}
// 优化
public static class ViewHolder {
public TextView title;
public CheckBox cbCheckBox;
}
// 全选按钮获取状态
public Map<Integer, Boolean> getMap() {
// 返回状态
return isCheck;
}
// 删除一个数据
public void removeData(int position) {
list.remove(position);
}
}

当然,有些方法是后面写的,我们提前写好,比如删除和增加什么的

初始化数据

我们默认总是需要点数据的

private void initData() {
// 默认显示的数据
List<Bean> list = new ArrayList<Bean>();
list.add(new Bean("张三"));
list.add(new Bean("李四"));
list.add(new Bean("王五"));
adapter = new ListAdapter(this);
adapter.setData(list);
listview.setAdapter(adapter);
}

增加数据

// 添加数据
case R.id.tv_add:
adapter.addData(new Bean("刘桂林"));
// 通知刷新适配器
adapter.notifyDataSetChanged();
break;

全选数据

当我们全选的时候,按钮应该为全不选的,所以这里我们这里有状态的

case R.id.btn_select_all:
// 全选——全不选
Map<Integer, Boolean> isCheck = adapter.getMap();
if (btn_select_all.getText().equals("全选")) {
adapter.initCheck(true);
// 通知刷新适配器
adapter.notifyDataSetChanged();
btn_select_all.setText("全不选");
btn_select_all.setTextColor(Color.YELLOW);
} else if (btn_select_all.getText().equals("全不选")) {
adapter.initCheck(false);
// 通知刷新适配器
adapter.notifyDataSetChanged();
btn_select_all.setText("全选");
btn_select_all.setTextColor(Color.YELLOW);
}
break;

删除数据

删除也是要考虑很多因素

// 删除数据
case R.id.btn_detele:
// 拿到所有数据
Map<Integer, Boolean> isCheck_delete = adapter.getMap();
// 获取到条目数量,map.size = list.size,所以
int count = adapter.getCount();
// 遍历
for (int i = 0; i < count; i++) {
// 删除有两个map和list都要删除 ,计算方式
int position = i - (count - adapter.getCount());
// 判断状态 true为删除
if (isCheck_delete.get(i) != null && isCheck_delete.get(i)) {
// listview删除数据
isCheck_delete.remove(i);
adapter.removeData(position);
}
}
btn_select_all.setText("全选");
btn_select_all.setTextColor(Color.WHITE);
adapter.notifyDataSetChanged();
break;

这里的

int position = i - (count - adapter.getCount());

是一个计算方式,当我们删除之后,实际上数组是需要重新排列的,同时按钮也要变回全选状态的

listview的点击

我们直接点击也是可以勾选cheakbox选中的
// listview的点击事件
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// 判断view是否相同
if (view.getTag() instanceof ViewHolder) {
// 如果是的话,重用
ViewHolder holder = (ViewHolder) view.getTag();
// 自动触发
holder.cbCheckBox.toggle();
}
}

以上所述是小编给大家介绍的Android中ListView绑定CheckBox实现全选增加和删除功能(DEMO),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
checkbox全选
jquery checkbox 全选、checkbox 全选、checkbox全选全不选、js checkbox 全选、vue checkbox 全选,以便于您获取更多的相关知识。

时间: 2024-10-03 08:57:21

Android中ListView绑定CheckBox实现全选增加和删除功能(DEMO)_Android的相关文章

Android中ListView绑定CheckBox实现全选增加和删除功能(DEMO)

ListView控件还是挺复杂的,也是项目中应该算是比较常用的了,所以写了一个小Demo来讲讲,主要是自定义adapter的用法,加了很多的判断等等等等-.我们先来看看实现的效果吧! 好的,我们新建一个项目LvCheckBox 我们事先先把这两个布局写好吧,一个是主布局,还有一个listview的item.xml,相信不用多说 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/

Android高级控件(一)——ListView绑定CheckBox实现全选,增加和删除等功能

Android高级控件(一)--ListView绑定CheckBox实现全选,增加和删除等功能 这个控件还是挺复杂的,也是项目中应该算是比较常用的了,所以写了一个小Demo来讲讲,主要是自定义adapter的用法,加了很多的判断等等等等-.我们先来看看实现的效果吧! 好的,我们新建一个项目LvCheckBox 我们事先先把这两个布局写好吧,一个是主布局,还有一个listview的item.xml,相信不用多说 activity_main.xml <LinearLayout xmlns:andro

Android 中使用EditText 点击全选再次点击取消全选功能_Android

最近在开发浏览器碰到这么一个需求:点击地址栏的时候,需要全选并调出键盘,再次点击就取消全选显示光标.点击屏幕除地址栏其他位置时,键盘隐藏,隐藏光标. 大部分浏览器都是这样的逻辑,这样可以提高用户体验,减少操作. 代码很简单,这里我简化了逻辑,页面只有一个EditText. 布局文件如下:里面有两个属性需要注意 android:focusable="true" android:selectAllOnFocus="true" 完整布局文件 <?xml versio

Android 中使用EditText 点击全选再次点击取消全选功能

最近在开发浏览器碰到这么一个需求:点击地址栏的时候,需要全选并调出键盘,再次点击就取消全选显示光标.点击屏幕除地址栏其他位置时,键盘隐藏,隐藏光标. 大部分浏览器都是这样的逻辑,这样可以提高用户体验,减少操作. 代码很简单,这里我简化了逻辑,页面只有一个EditText. 布局文件如下:里面有两个属性需要注意 android:focusable="true" android:selectAllOnFocus="true" 完整布局文件 <?xml versio

Android中ListView结合CheckBox实现数据批量选择(全选、反选、全不选)

APP的开发中,会常遇到这样的需求:批量取消(删除)List中的数据.这就要求ListVIew支持批量选择.全选.单选等等功能,做一个比较强大的ListView批量选择功能是很有必要的,那如何做呢? 可想而知,要支持批量选择,那CheckBox的使用是不可或缺的,下面,就使用ListView结合CheckBox实现数据的批量选择. 先看下效果图,有图有真相: 先说明接下来要实现的ListView+CheckBox支持的功能: 1.  外部点击"编辑"(长按ListView的某一项也可)

android基于ListView和CheckBox实现多选和全选记录的功能_Android

应用开发中经常会有从数据库中读取数据显示,然后选中多条.全部记录并且删除的需求.在做定制系统联系人的时候也遇到这样的需求,下面写个简单的通过ListView和CheckBox实现多选.全选的例子.下面是具体的代码. 效果如下: MultiSelectActivity /** * MultiSelectActivity */ public class MultiSelectActivity extends Activity implements OnClickListener, OnItemCli

android基于ListView和CheckBox实现多选和全选记录的功能

应用开发中经常会有从数据库中读取数据显示,然后选中多条.全部记录并且删除的需求.在做定制系统联系人的时候也遇到这样的需求,下面写个简单的通过ListView和CheckBox实现多选.全选的例子.下面是具体的代码. 效果如下: MultiSelectActivity /** * MultiSelectActivity */ public class MultiSelectActivity extends Activity implements OnClickListener, OnItemCli

Android中ListView包含CheckBox时滑动丢失选中状态的解决

现象:listview 中,如果有10项,其中手机屏幕显示1-6项,其余的7-10项在屏幕中不可见,得向下滚动后才能看到,这个时候,如果选中1.2项,再滚动到7-10项,之后再滚动回来1-6项,就发现1.2项并未被选中. 解决方法: 编写自定义的Adapter public class TestAdapter extends ArrayAdapter<String> { private int resource; private LayoutInflater inflater; private

Android 中ListView的Item点击事件失效的快速解决方法_Android

在平常的开发过程中,我们的ListView可能不只是简单的显示下文本或者按钮,更多的是显示复杂的布局,这样的话,我们就得自己写布局和自定义adapter了,一般是继承于BaseAdapter,示例代码见下方.写ListView的点击事件时OnItemClickListener,onItemClick方法没有执行,导致ListView中Item条目点击事件失效,而Item中的View点击事件可以在getView方法中进行处理.导致整个Item点击失效的原因多半是由于在[你自己定义的Item中存在诸