Android中ListView结合CheckBox判断选中项
本文主要实现在自定义的ListView布局中加入CheckBox控件,通过判断用户是否选中CheckBox来对ListView的选中项进行相应的操作。通过一个Demo来展示该功能,选中ListView中的某一项,然后点击Button按钮来显示选中了哪些项。
[1] 程序结构图如下:
listitem.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:descendantFocusability="blocksDescendants">
- <CheckBox
- android:id="@+id/list.select"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
- <TextView
- android:id="@+id/list.name"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="Name"
- android:layout_gravity="center"
- android:textSize="20dp"
- android:layout_marginLeft="10dp"/>
- <TextView
- android:id="@+id/list.address"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="Address"
- android:layout_gravity="center"
- android:textSize="20dp"/>
- </LinearLayout>
- </LinearLayout>
main.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <Button
- android:id="@+id/show"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="Show"/>
- <ListView
- android:id="@+id/lvperson"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"/>
- </LinearLayout>
Person.java:
- package com.andyidea.bean;
- public class Person {
- private String name;
- private String address;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- }
MainActivity.java:
- package com.andyidea.listview;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import com.andyidea.bean.Person;
- import android.app.Activity;
- import android.app.AlertDialog;
- import android.content.Context;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.Button;
- import android.widget.CheckBox;
- import android.widget.ListView;
- import android.widget.TextView;
- public class MainActivity extends Activity {
- Button show;
- ListView lv;
- List<Person> persons = new ArrayList<Person>();
- Context mContext;
- MyListAdapter adapter;
- List<Integer> listItemID = new ArrayList<Integer>();
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mContext = getApplicationContext();
- show = (Button)findViewById(R.id.show);
- lv = (ListView)findViewById(R.id.lvperson);
- initPersonData();
- adapter = new MyListAdapter(persons);
- lv.setAdapter(adapter);
- show.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- listItemID.clear();
- for(int i=0;i<adapter.mChecked.size();i++){
- if(adapter.mChecked.get(i)){
- listItemID.add(i);
- }
- }
- if(listItemID.size()==0){
- AlertDialog.Builder builder1 = new AlertDialog.Builder(MainActivity.this);
- builder1.setMessage("没有选中任何记录");
- builder1.show();
- }else{
- StringBuilder sb = new StringBuilder();
- for(int i=0;i<listItemID.size();i++){
- sb.append("ItemID="+listItemID.get(i)+" . ");
- }
- AlertDialog.Builder builder2 = new AlertDialog.Builder(MainActivity.this);
- builder2.setMessage(sb.toString());
- builder2.show();
- }
- }
- });
- }
- /**
- * 模拟数据
- */
- private void initPersonData(){
- Person mPerson;
- for(int i=1;i<=12;i++){
- mPerson = new Person();
- mPerson.setName("Andy"+i);
- mPerson.setAddress("GuangZhou"+i);
- persons.add(mPerson);
- }
- }
- //自定义ListView适配器
- class MyListAdapter extends BaseAdapter{
- List<Boolean> mChecked;
- List<Person> listPerson;
- HashMap<Integer,View> map = new HashMap<Integer,View>();
- public MyListAdapter(List<Person> list){
- listPerson = new ArrayList<Person>();
- listlistPerson = list;
- mChecked = new ArrayList<Boolean>();
- for(int i=0;i<list.size();i++){
- mChecked.add(false);
- }
- }
- @Override
- public int getCount() {
- return listPerson.size();
- }
- @Override
- public Object getItem(int position) {
- return listPerson.get(position);
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- View view;
- ViewHolder holder = null;
- if (map.get(position) == null) {
- Log.e("MainActivity","position1 = "+position);
- LayoutInflater mInflater = (LayoutInflater) mContext
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- view = mInflater.inflate(R.layout.listitem, null);
- holder = new ViewHolder();
- holder.selected = (CheckBox)view.findViewById(R.id.list_select);
- holder.name = (TextView)view.findViewById(R.id.list_name);
- holder.address = (TextView)view.findViewById(R.id.list_address);
- final int p = position;
- map.put(position, view);
- holder.selected.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- CheckBox cb = (CheckBox)v;
- mChecked.set(p, cb.isChecked());
- }
- });
- view.setTag(holder);
- }else{
- Log.e("MainActivity","position2 = "+position);
- view = map.get(position);
- holder = (ViewHolder)view.getTag();
- }
- holder.selected.setChecked(mChecked.get(position));
- holder.name.setText(listPerson.get(position).getName());
- holder.address.setText(listPerson.get(position).getAddress());
- return view;
- }
- }
- static class ViewHolder{
- CheckBox selected;
- TextView name;
- TextView address;
- }
- }
运行结果:
Android中ListView结合CheckBox判断选中项的更多相关文章
- Android中Listview点击item不变颜色以及设置listselector 无效
Android中Listview点击item不变颜色以及设置listselector 无效 这是同一个问题,Listview中点击item是会变颜色的,因为listview设置了默认的listsele ...
- Android中ListView控件的使用
Android中ListView控件的使用 ListView展示数据的原理 在Android中,其实ListView就相当于web中的jsp,Adapter是适配器,它就相当于web中的Servlet ...
- android中ListView控件&&onItemClick事件中获取listView传递的数据
http://blog.csdn.net/aben_2005/article/details/6592205 本文转载自:android中ListView控件&&onItemClick ...
- android中ListView点击和里边按钮点击不能同时生效问题解决
今天遇到一个问题:android中ListView点击和里边button点击不能同时生效问题解决. 原因是: listView 在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得 ...
- Android中ListView无法点击
Android中ListView无法点击 转自:http://xqjay19910131-yahoo-cn.iteye.com/blog/1319502 问题描述: ListView中Item加入 ...
- Android中 ListView 详解(二)
本文版权归 csdn noTice501 所有,转载请详细标明原作者及出处,以示尊重! 作者:noTice501 原文:http://blog.csdn.net/notice520/article/d ...
- android中listview分页载入数据
前段时间做的新浪微博项目一直想实现listview分页载入数据,今天最终实现了,哈哈!感觉挺好的,今天又写了个demo给大家分享下. 首先说下listview的优化方案,这也是面试中常考的题目.优化方 ...
- Android中ListView的几种常见的优化方法
Android中的ListView应该算是布局中几种最常用的组件之一了,使用也十分方便,下面将介绍ListView几种比较常见的优化方法: 首先我们给出一个没有任何优化的Listview的Adapte ...
- android中listview的item滑动删除效果(已解决listview点击问题)
领导看到iphone上tableview有个滑动删除的效果,要求在android上也实现,搜了下资料,实现起来比较简单,可弄到后面,居然不能点击了,把一篇文章中的代码修改了一下,捣鼓了一番,搞定,下面 ...
随机推荐
- C# MD5加密-MD5Helper
原文地址:https://ken.io/note/csharp-md5 一.前言 MD5说明http://zh.wikipedia.org/wiki/MD5 .NET MD5类 官方文档&示例 ...
- Mongodb 分片原理
1.主从mongodb 模式 类似,MySQL的主从配置 参照:https://blog.csdn.net/liusong0605/article/details/11551699 mongoDB有 ...
- Python爬虫:数据解析 之 xpath
资料: W3C标准:https://www.w3.org/TR/xpath/all/ W3School:https://www.w3school.com.cn/xpath/index.asp 菜鸟教程 ...
- ubuntu资料
1.VNC实现Windows远程访问Ubuntu 16.04(无需安装第三方桌面,直接使用自带远程工具) https://www.cnblogs.com/xuliangxing/p/7642650.h ...
- mxgraph初体验
最近公司让学习了mxgraph,简单总结一下 (1)mxGraph学习路径 1)API:http://jgraph.github.io/mxgraph/docs/js-api/files/index- ...
- Linux vim中方向键变成字母的问题
使用Ubuntu Desktop 18.04 时 发现 vim 在编辑模式的时候,方向键变成了字母ABCD. 原因: Ubuntu预装的是vim tiny版本,安装vim full版本即可解决. 1. ...
- oracle的decode、sign、nvl,case...then函数
ORACLE几种常用的方法 1.decode 常见的用法 : 格式:decode(condition,value1,result[, value2,result2], default_result) ...
- Node Sass does not yet support your current environment: Linux 64-bit with Unsupported runtime
环境: ubuntu18 webstorm vue项目 报错原因: 缺少相关依赖 解决方法: npm rebuild node-sass 还未解决: npm uninstall --save node ...
- 汇编语言从入门到精通-5微机CPU的指令系统2
微机CPU的指令系统 5.2.2 标志位操作指令 标志位操作指令是一组对标志位置位.复位.保存和恢复等操作的指令. 1.进位CF操作指令 a.清进位指令CLC(Clear Carry Flag):CF ...
- js运动框架及应用
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...