首页 > 系统 > Android > 正文

Android checkbox的listView具体操作方法

2020-04-11 11:09:03
字体:
来源:转载
供稿:网友

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表