Android checkbox的listView具体操作方法

本文主要实现在自定义的ListView布局中加入CheckBox控件,通过判断用户是否选中CheckBox来对ListView的选中项进行相应的操作。通过一个Demo来展示该功能,选中ListView中的某一项,然后点击Button按钮来显示选中了哪些项。
1、程序结构图如下:

其中Person.java是实体类,MainActivity.java是Activity组件类。listitem.xml是自定义的列表每项布局文件。
2、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>

3、 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>

4、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;
 } 

} 

5、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>();
   listPerson = 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软件编程有所帮助。

(0)

相关推荐

  • Android MVP模式ListView中嵌入checkBox的使用方法

    MVP模式 ListView中嵌入checkBox的使用 本文写的是一个小demo,如何在ListView中嵌入checkBox配合使用,本篇文章与前面的嵌入Button类似,同样的采用MVP模式的写代码,本次案例中会有几个小细节,我将会在案例中介绍. 程序基本框架如下: View层: MainActivity.java public class MainActivity extends AppCompatActivity implements ViewInter<MyBean>{ //Lis

  • Android在listview添加checkbox实现原理与代码

    主界面CheckBoxinListViewActivity.java代码如下: 复制代码 代码如下: public class CheckBoxinListViewActivity extends Activity { /** Called when the activity is first created. */ private MyAdapter adapter; private ListView listview; private Button checkAll; private But

  • Android编程之listView中checkbox用法实例分析

    本文实例讲述了Android编程之listView中checkbox用法.分享给大家供大家参考,具体如下: 我们经常会用到在listView中使用checkbox的情况.直接不回应用后会发现,ListView中的OnItemClickListener事件会和checkbox中的选择事件发生冲突,这个怎么处理呢.直接上代码. list_item.xml代码: <?xml version="1.0" encoding="utf-8"?> <Relati

  • Android ListView ImageView实现单选按钮实例

    做Android开发两年的时间,技术稍稍有一些提升,刚好把自己实现的功能写出来,记录一下,如果能帮助到同行的其他人,我也算是做了件好事,哈哈!!废话不多说,先上个图. 先上一段代码: 1 if (lastposition == position){ 2 viewHolder.setImageResource(R.id.iv_yuandian1,R.mipmap.ic_button_checked); 3 } else { 4 viewHolder.setImageResource(R.id.iv

  • Android checkbox的listView(多选,全选,反选)具体实现方法

    布局文件:[html]  复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?>  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent"      android:layout_height=

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

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

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

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

  • Android中ListView + CheckBox实现单选、多选效果

    还是先来看看是不是你想要的效果: 不废话,直接上代码,很简单,代码里都有注释 1 单选 public class SingleActivity extends AppCompatActivity { private ListView listView; private ArrayList<String> groups; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInsta

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

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

  • Android checkbox的listView具体操作方法

    本文主要实现在自定义的ListView布局中加入CheckBox控件,通过判断用户是否选中CheckBox来对ListView的选中项进行相应的操作.通过一个Demo来展示该功能,选中ListView中的某一项,然后点击Button按钮来显示选中了哪些项. 1.程序结构图如下: 其中Person.java是实体类,MainActivity.java是Activity组件类.listitem.xml是自定义的列表每项布局文件. 2.listitem.xml布局文件源码如下: <?xml versi

  • Android开发中ListView自定义adapter的封装

    [引入] 我们一般编写listView的时候顺序是这样的:  •需要展示的数据集List<T>  •为这个数据集编写一个ListView  •为这个ListView编写一个Adapter,一般继承自BaseAdapter  •在BaseAdapter内部编写一个ViewHolder类,对应ListView里面的item控件,提高控件的查询效率 分析: List<T>:ListView --> Adapter extends BaseAdapter --> ViewHol

  • Android实现的ListView分组布局改进示例

    本文实例讲述了Android实现的ListView分组布局改进方法.分享给大家供大家参考,具体如下: 由于是在网上转载的一篇文章,在这里就不多说废话了,首先看一下最终的效果图: 然后是实现该ListView布局的主要代码: 1.程序主界面 SeparateListView.java package whu.iss.wuxianglong; import java.util.ArrayList; import java.util.List; import android.app.Activity;

  • Android开发之ListView、GridView 详解及示例代码

    ListView与GridView是Android开发中的常用控件,它们和Adapter配合使用能够实现很多界面效果.下面分别以实例说明ListView.GridView的用法.        1.ListView的Android开发实例 ListView 是android开发中最常用的控件之一,一般构成列表包括三个元素,ListView:用来展示列表的视图.Adapter:数据与视图连接的桥梁.Data:具体的数据包括字符串 .图片或者控件. 适配器一般有以下几种类型: ArrayAdapte

  • Android控件ListView使用方法详解

    Android控件ListView使用方法介绍,具体如下 一.ListView的简单用法 首先新建一个ListViewTest项目,并让Android Studio自动创建好活动.然后修改activity_main.xml中的代码,如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/re

  • Android编程记录ListView标记行状态的方法

    本文实例讲述了Android编程记录ListView标记行状态的方法.分享给大家供大家参考,具体如下: 小Demo无什么特别之处,最特别的就是尽量少用notifyDataSetChanged,开销太大了,当然使用是会省不少工的,不过有时候还是会遇到别的问题的,项目经验表示会有这个可能性的,废话不多少了,直接上关键代码. @Override public void onItemClick(AdapterView<?> adapterView, View view, int pos, long a

  • Android编程实现ListView头部ViewPager广告轮询图效果

    本文实例讲述了Android编程实现ListView头部ViewPager广告轮询图效果.分享给大家供大家参考,具体如下: 之前看了别人的一些软件,发现其广告图轮询的时候,那个广告感觉和ViewPager的效果不太一样,后来也查了一下,是因为时间问题,找了一些资料,自己也实践一下. 1.为了解决ListView头部加ViewPager滑动冲突问题,必须自定义ListView,重写里面的onInterceptTouchEvent方法,ListView代码如下: package com.exampl

  • Android开发之ListView实现Item局部刷新

    对于android中的ListView刷新机制,大多数的程序员都是很熟悉的,修改或者添加adapter中的数据源之后,然后调用notifyDataSetChanged()刷新ListView.在这种模式下,我们会在getView中,根据不同的数据源,让控件显示不同的内容.这种模式是最常见的刷新模式,当我们来回滑动ListView的时候,调用adapter的getView方法,然后listview对adapter返回的View进行绘制.这种模式下,View的显示内容或状态都记录在adapter里面

随机推荐