自定義相簿時候的複選框☑️問題。
阿新 • • 發佈:2018-12-18
我的相簿裡是一個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。
歡迎來吐槽交流?