文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android checkbox的listView具体操作方法

2022-06-06 09:22

关注

本文主要实现在自定义的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>(); 
  
 @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软件编程有所帮助。

您可能感兴趣的文章:Android ListView ImageView实现单选按钮实例android基于ListView和CheckBox实现多选和全选记录的功能Android中ListView绑定CheckBox实现全选增加和删除功能(DEMO)Android MVP模式ListView中嵌入checkBox的使用方法Android编程之listView中checkbox用法实例分析Android中ListView结合CheckBox实现数据批量选择(全选、反选、全不选)Android checkbox的listView(多选,全选,反选)具体实现方法Android在listview添加checkbox实现原理与代码Android中ListView + CheckBox实现单选、多选效果


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯