当前位置: 首页 > 编程笔记 >

Android checkbox的listView具体操作方法

董元徽
2023-03-14
本文向大家介绍Android checkbox的listView具体操作方法,包括了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软件编程有所帮助。

 类似资料:
  • 本文向大家介绍EF 配置Oracle数据库的具体操作方法,包括了EF 配置Oracle数据库的具体操作方法的使用技巧和注意事项,需要的朋友参考一下 EF可以配置Oracle数据库,但不知道为什么一直配置不好。 其实可以使用使用NUGET管理程序包,自动配置数据库,但需要注意的时,需要安装两个包,而并不是一个,我一直以为时一个,但已启动程序就会出错。 安装后配置文件的主要的改变如下:  oracle

  • Java微基准测试工具(JMH)中注释< code > @ operationsperinguration 的JavaDoc声明: 公共抽象整型值 每个基准调用的操作数。默认值:1 刚接触JMH,我想知道这里指的是什么类型的操作(字节码操作,汇编代码操作,Java操作等等)。 这个问题自然涉及JMH中使用术语“操作”的所有地方(文档、输出、注释等)(例如“操作/时间”单位或“时间单位/操作”)。

  • Examining the File System Contents # os_listdir.py import os import sys print(sorted(os.listdir(sys.argv[1]))) # os_walk.py import os import sys # If we are not given a path to list, use /tmp if le

  • 本文向大家介绍MyBatis 实现一对一有几种方式?具体怎么操作的?相关面试题,主要包含被问及MyBatis 实现一对一有几种方式?具体怎么操作的?时的应答技巧和注意事项,需要的朋友参考一下 有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次, 通过在resultMap 里面配置 association 节点配置一对一的类就可以完成; 嵌套查询是先查一个表,根据这个表里面的结果的 外键 i

  • 本文向大家介绍浅谈jQuery操作类数组的工具方法,包括了浅谈jQuery操作类数组的工具方法的使用技巧和注意事项,需要的朋友参考一下 在很多时候,JQuery的$()函数都返回一个类似数据的JQuery对象,例如$(‘div')将返回div里面的所有div元素包装的JQuery对象。在这种情况下,JQuery提供了几个常用的属性和方法来操作JQuery对象。 length:该属性返回JQuery

  • 2.12.1. Linux注意事项 2.12.2. Mac OS X注意事项 2.12.3. Solaris注意事项 2.12.4. BSD注意事项 2.12.5. 其它Unix注意事项 2.12.6. OS/2注意事项 2.12.1. Linux注意事项 2.12.1.1. Linux操作系统注意事项 2.12.1.2. Linux二进制分发版说明 2.12.1.3. Linux源码分发版说明

  •  KAG 的操作方法说明如下。 Note  这是通常情况下的操作。虽然根据游戏的不同,也会有些功能不开放,不过把这个直接复制粘贴到游戏说明书里也无所谓吧(汗) 基本的操作 「鼠标左键单击」或「滚轮向下滚动」或「确认键」或「空格键」 显示下一段文字、选择选项、按下按钮、选择勾选框等动作 「鼠标右键单击」或「ESC 键」 打开历史记录,或呼叫右键菜单 「↑」「↓」 或 「←」「→」 或 「TAB」「S

  • 本文向大家介绍angular.extend方法的具体使用,包括了angular.extend方法的具体使用的使用技巧和注意事项,需要的朋友参考一下 AngularJs的angular.extend()方法可以把一个或多个对象中的方法和属性扩展到一个目的对象中,使得这个对象拥有其他对象相同的方法和属性,如下图所示。 angular.extends()方法的第一个参数是要被扩展的对象,后面可以传入一个