`

Android中ListView结合CheckBox判断选中项

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

[1] 程序结构图如下:


其中Person.java是实体类,MainActivity.java是Activity组件类。listitem.xml是自定义的列表每项布局文件。

[2] listitem.xml布局文件源码如下:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:Android="http://schemas.android.com/apk/res/android"
  4. Android:orientation="vertical"
  5. Android:layout_width="fill_parent"
  6. Android:layout_height="fill_parent">
  7. <LinearLayout
  8. Android:layout_width="fill_parent"
  9. Android:layout_height="wrap_content"
  10. Android:orientation="horizontal"
  11. Android:descendantFocusability="blocksDescendants">
  12. <CheckBox
  13. Android:id="@+id/list.select"
  14. Android:layout_width="wrap_content"
  15. Android:layout_height="wrap_content"/>
  16. <TextView
  17. Android:id="@+id/list.name"
  18. Android:layout_width="fill_parent"
  19. Android:layout_height="wrap_content"
  20. Android:layout_weight="1"
  21. Android:text="Name"
  22. Android:layout_gravity="center"
  23. Android:textSize="20dp"
  24. Android:layout_marginLeft="10dp"/>
  25. <TextView
  26. Android:id="@+id/list.address"
  27. Android:layout_width="fill_parent"
  28. Android:layout_height="wrap_content"
  29. Android:layout_weight="1"
  30. Android:text="Address"
  31. Android:layout_gravity="center"
  32. Android:textSize="20dp"/>
  33. </LinearLayout>
  34. </LinearLayout>
[3] main.xml布局文件源码如下:
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:Android="http://schemas.android.com/apk/res/android"
  3. Android:orientation="vertical"
  4. Android:layout_width="fill_parent"
  5. Android:layout_height="fill_parent">
  6. <Button
  7. Android:id="@+id/show"
  8. Android:layout_width="fill_parent"
  9. Android:layout_height="wrap_content"
  10. Android:text="Show"/>
  11. <ListView
  12. Android:id="@+id/lvperson"
  13. Android:layout_width="fill_parent"
  14. Android:layout_height="fill_parent"/>
  15. </LinearLayout>
[4] Person.java实体类源码如下:
  1. packagecom.andyidea.bean;
  2. publicclassPerson{
  3. privateStringname;
  4. privateStringaddress;
  5. publicStringgetName(){
  6. returnname;
  7. }
  8. publicvoidsetName(Stringname){
  9. this.name=name;
  10. }
  11. publicStringgetAddress(){
  12. returnaddress;
  13. }
  14. publicvoidsetAddress(Stringaddress){
  15. this.address=address;
  16. }
  17. }
[5] MainActivity.java类源码如下:
  1. packagecom.andyidea.listview;
  2. importjava.util.ArrayList;
  3. importjava.util.HashMap;
  4. importjava.util.List;
  5. importcom.andyidea.bean.Person;
  6. importAndroid.app.Activity;
  7. importAndroid.app.AlertDialog;
  8. importAndroid.content.Context;
  9. importAndroid.os.Bundle;
  10. importAndroid.util.Log;
  11. importAndroid.view.LayoutInflater;
  12. importAndroid.view.View;
  13. importAndroid.view.ViewGroup;
  14. importAndroid.widget.BaseAdapter;
  15. importAndroid.widget.Button;
  16. importAndroid.widget.CheckBox;
  17. importAndroid.widget.ListView;
  18. importAndroid.widget.TextView;
  19. publicclassMainActivityextendsActivity{
  20. Buttonshow;
  21. ListViewlv;
  22. List<Person>persons=newArrayList<Person>();
  23. ContextmContext;
  24. MyListAdapteradapter;
  25. List<Integer>listItemID=newArrayList<Integer>();
  26. /**Calledwhentheactivityisfirstcreated.*/
  27. @Override
  28. publicvoidonCreate(BundlesavedInstanceState){
  29. super.onCreate(savedInstanceState);
  30. setContentView(R.layout.main);
  31. mContext=getApplicationContext();
  32. show=(Button)findViewById(R.id.show);
  33. lv=(ListView)findViewById(R.id.lvperson);
  34. initPersonData();
  35. adapter=newMyListAdapter(persons);
  36. lv.setAdapter(adapter);
  37. show.setOnClickListener(newView.OnClickListener(){
  38. @Override
  39. publicvoidonClick(Viewv){
  40. listItemID.clear();
  41. for(inti=0;i<adapter.mChecked.size();i++){
  42. if(adapter.mChecked.get(i)){
  43. listItemID.add(i);
  44. }
  45. }
  46. if(listItemID.size()==0){
  47. AlertDialog.Builderbuilder1=newAlertDialog.Builder(MainActivity.this);
  48. builder1.setMessage("没有选中任何记录");
  49. builder1.show();
  50. }else{
  51. StringBuildersb=newStringBuilder();
  52. for(inti=0;i<listItemID.size();i++){
  53. sb.append("ItemID="+listItemID.get(i)+".");
  54. }
  55. AlertDialog.Builderbuilder2=newAlertDialog.Builder(MainActivity.this);
  56. builder2.setMessage(sb.toString());
  57. builder2.show();
  58. }
  59. }
  60. });
  61. }
  62. /**
  63. *模拟数据
  64. */
  65. privatevoidinitPersonData(){
  66. PersonmPerson;
  67. for(inti=1;i<=12;i++){
  68. mPerson=newPerson();
  69. mPerson.setName("Andy"+i);
  70. mPerson.setAddress("GuangZhou"+i);
  71. persons.add(mPerson);
  72. }
  73. }
  74. //自定义ListView适配器
  75. classMyListAdapterextendsBaseAdapter{
  76. List<Boolean>mChecked;
  77. List<Person>listPerson;
  78. HashMap<Integer,View>map=newHashMap<Integer,View>();
  79. publicMyListAdapter(List<Person>list){
  80. listPerson=newArrayList<Person>();
  81. listlistPerson=list;
  82. mChecked=newArrayList<Boolean>();
  83. for(inti=0;i<list.size();i++){
  84. mChecked.add(false);
  85. }
  86. }
  87. @Override
  88. publicintgetCount(){
  89. returnlistPerson.size();
  90. }
  91. @Override
  92. publicObjectgetItem(intposition){
  93. returnlistPerson.get(position);
  94. }
  95. @Override
  96. publiclonggetItemId(intposition){
  97. returnposition;
  98. }
  99. @Override
  100. publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
  101. Viewview;
  102. ViewHolderholder=null;
  103. if(map.get(position)==null){
  104. Log.e("MainActivity","position1="+position);
  105. LayoutInflatermInflater=(LayoutInflater)mContext
  106. .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  107. view=mInflater.inflate(R.layout.listitem,null);
  108. holder=newViewHolder();
  109. holder.selected=(CheckBox)view.findViewById(R.id.list_select);
  110. holder.name=(TextView)view.findViewById(R.id.list_name);
  111. holder.address=(TextView)view.findViewById(R.id.list_address);
  112. finalintp=position;
  113. map.put(position,view);
  114. holder.selected.setOnClickListener(newView.OnClickListener(){
  115. @Override
  116. publicvoidonClick(Viewv){
  117. CheckBoxcb=(CheckBox)v;
  118. mChecked.set(p,cb.isChecked());
  119. }
  120. });
  121. view.setTag(holder);
  122. }else{
  123. Log.e("MainActivity","position2="+position);
  124. view=map.get(position);
  125. holder=(ViewHolder)view.getTag();
  126. }
  127. holder.selected.setChecked(mChecked.get(position));
  128. holder.name.setText(listPerson.get(position).getName());
  129. holder.address.setText(listPerson.get(position).getAddress());
  130. returnview;
  131. }
  132. }
  133. staticclassViewHolder{
  134. CheckBoxselected;
  135. TextViewname;
  136. TextViewaddress;
  137. }
  138. }
[6] 程序运行后的结果如下:


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics