在日常的开发中作为开发者的我们会用到许多列表控件,比如在Android5.0发布之前普遍存在的listview、GridView以及在Android5.0发布之后大家常用的RecyclerView,在这些列表控件的使用中我们偶尔会配合着CheckBox(复选框)一起使用,在使用过程中往往会出现item错乱以及选中的item丢失的各种情况,那么作为开发人员的我们来讲应该怎么解决呢?接下来就来说一说GridView和CheckBox在配合使用的过程中出现的问题以及解决方法:

第一步:创建布局文件与实现基本数据和适配器

(1)在XML布局中引入GirdView控件 在类文件里面进行相应的处理

(2)适配器的编写:定义一个类继承于BaseAdapter

第二步:解决item的重用

(1)在getView方法中处理

(2)定义一个内部类来减少各个控件的重用

接下来就来看看这两步的具体实现的代码:

一:

(1):布局引用

GridView 
 android:id=”@+id/gridView” 
 android:layout_width=”match_parent” 
 android:layout_height=”match_parent” 
 android:numColumns=”4”

(2):适配器的编写

定义一个类,继承于BaseAdapter,然后实现getCount,getItem,getItemID,getView这四个基本的方法,在getView方法中处理item的重用

ViewHolder mHolder = null; 
 if (convertView == null) { 
 convertView = LayoutInflater.from(context).inflate(R.layout.adapter_tejia_content_grid, null); 
 mHolder = new ViewHolder(); 
 convertView.setTag(mHolder); 
 } else { 
 mHolder = (ViewHolder) convertView.getTag(); 
 } 
 return convertView;

第三步:解决item配合CheckBox使用

(1):引用CheckBox,在布局文件中插入

(2):解决复用与错乱

代码编写:

(1):

CheckBox 
 android:id=”@+id/checkbox” 
 android:layout_width=”match_parent” 
 android:layout_height=”match_parent”

(2):解决复用错乱

首先我们都知道CheckBox在使用的时候有两种状态,选中和未选中,在GirdView滑动的过程中随着item的重用,checkbox的状态也会随着被复用,那么在这个时候我们可以使用一个map集合在存储当前position的checkbox的状态,然后在

Android设置checkbox图标 android的checkbox_gridview


然后利用convertView的setTag方法把当前选中的position作为tag传出来,然后在checkbox的点击监听里面去判断如果是复用的那就设置他的状态为false,如果没有那就放入到map中去,但是这个地方需要注意的一点就是在setTag之前需要把checkbox的监听设置为null,原因是如果不设置为null那么系统无法判定这个tag和监听,任然会导致错乱。然后在监听的方法里面这样判断

Android设置checkbox图标 android的checkbox_android_02


其中需要注意的一点是在setTag之前必须要将监听设置为空,谢谢