我的相册里是一个recycleView所以操作起来也很方便,我这里直接就粘贴条目布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:scaleType="centerCrop"
android:layout_marginTop="30dp"
android:layout_centerInParent="true"
android:id="@+id/imagg"
android:src="@mipmap/ic_launcher"
android:layout_width="180dp"
android:layout_height="180dp" />
<CheckBox
android:id="@+id/check_pic"
android:button="@null"
android:background="@drawable/chexpic"
android:layout_alignRight="@+id/imagg"
android:layout_marginRight="8dp"
android:layout_marginTop="22dp"
android:layout_width="30dp"
android:layout_height="30dp" />
</RelativeLayout>
很重要的一点是,为了避免删除条目的时候checkbox不被复用,初始化的时候做一下操作
checkStates = new SparseArray<>();
for (int i = 0; i < mlist.size(); i++) {
checkStates.put(i, false);
}
在点击删除的操作的时候
//点击删除图片
btn_delet.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for (int i = 0; i < checkStates.size() ; i++) {
if (checkStates.valueAt(i)){
checkStates.delete(checkStates.keyAt(i));
i -- ;
}
}
if (delectOnclick != null){
delectOnclick.setDelectclcik(mllists,fl_delect);
}
recycleAdapter.notifyDataSetChanged();
}
});
然后在adapter中进行设置【记住这里面的条目个数必须用传过来的记录chex的集合】
@Override
public int getItemCount() {
return cheStatues.size();
}
然后在onBindViewHolder中加入
holder.check_pic.setChecked(cheStatues.valueAt(position));
然后设置监听
holder.check_pic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isChecked;
if (holder.check_pic.isChecked()){
checked(BitmapFactory.decodeFile(alist.get(position)),position);
isChecked = true;
}else {
cancleChecked(BitmapFactory.decodeFile(alist.get(position)),position,holder.check_pic);
isChecked = false;
}
cheStatues.setValueAt(position, isChecked);
}
});
然后点击删除
//点击删除
context.setDelectOnclick(new XiangCe.DelectOnclick() {
@Override
public void setDelectclcik(List<String> mllits,FrameLayout fl_delect) {
//删除选择的sd卡中的图片
delectpic(mllits);
llist.clear();
for (int i = 0; i < mllits.size(); i++) {
alist.remove(Integer.parseInt(mllits.get(i)));
}
mllits.clear();
fl_delect.setVisibility(View.GONE);
notifyDataSetChanged();
}
});
ok完美。
强调一下,必须用setOnClickListener,不要用 setOnCheckedChangeListener。因为button中的setCheck方法会默认调用setOnCheckedChangeListener,所以我们在这里做操作会出现问题,所以有俩种方式解决。
第一种:
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//当按钮被按下时会触发此listener if(!buttonView.isPressed())
return;
}
第二种:
就是我们程序中的点击事件setOnClickListener。
欢迎来吐槽交流?