AndroidRecyclerview实现多选,单选,全选,反选,批量删除
的功能
效果图如下:
Recyclerview 实现多选,单选,全选,反选,批量删除的步骤
1.在Recyclerview布局中添加上底部的全选和反选按钮,删除按钮,和计算数量等控件
2.这⾥选中的控件没有⽤checkbox来做,⽤的是imageview,选中和不选中其实是两张图⽚
3.默认是不显⽰选中的控件的,点击编辑的时候显⽰,点击取消的时候隐藏
4.通过adapter和activity数据之间的传递,然后进⾏具体的操作
具体代码如下:
在recyclerview的布局中写全选,反选,删除,计数等相应的控件
<LinearLayout
android:id="@+id/ll_mycollection_bottom_dialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="bottom"
android:visibility="gone"
android:background="@color/app_bg">
<View
android:background="#e5e5e5"
android:layout_width="match_parent"
android:layout_height="1px"/>
<RelativeLayout
android:background="@color/white"
android:layout_width="match_parent"
android:layout_height="@dimen/px_90">
<TextView
android:layout_centerVertical="true"
android:id="@+id/tv"
android:textColor="#1A1A1A"
android:textSize="@dimen/px_28"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/px_30"
android:text="@string/mine_certify_select" />
<TextView
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/tv"
android:textColor="#1A1A1A"
android:textSize="@dimen/px_28"
android:id="@+id/tv_select_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/px_18"
android:text="0" />
<Button
android:textColor="@color/color_b7b8bd"
android:textSize="@dimen/px_28"
android:layout_centerVertical="true"
android:background="@drawable/button__noclickable_shape"
android:gravity="center"
android:id="@+id/btn_delete"
android:layout_width="@dimen/px_160"
android:layout_height="@dimen/px_66"
android:layout_marginRight="@dimen/px_30"
android:layout_alignParentRight="true"
android:text="删除" />
<TextView
android:layout_centerVertical="true"
android:id="@+id/select_all"
android:layout_marginRight="@dimen/px_30"
android:background="@drawable/bg_selete_all"
android:layout_toLeftOf="@+id/btn_delete"
android:layout_width="@dimen/px_160"
android:layout_height="@dimen/px_66"
android:text="全选"
android:gravity="center"
android:textColor="#000001"
android:textSize="@dimen/px_28"/>
</RelativeLayout>
</LinearLayout>
Adapter中的布局就不必再写了,就⼀个item,最左边⼀个imageview.
<ImageView
android:id="@+id/check_box"
android:src="@mipmap/ic_uncheck"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="@dimen/px_24"
android:gravity="center"
android:visibility="gone"/>
布局写完开始写逻辑代码
⾸先在adapter定义⼀个⽅法,以便在activity中拿到数据添加进adapter中 public void notifyAdapter(List<MyLiveList.MyLive> myLiveList,boolean isAdd){
if (!isAdd){
this.mMyLiveList=myLiveList;
}else {
this.mMyLiveList.addAll(myLiveList);
}
notifyDataSetChanged();
}
然后在activity中拿到获取到数据后调⽤adapter中的这个⽅法,添加数据
在adapter中在判空,更有保证
public List<MyLiveList.MyLive> getMyLiveList(){
if (mMyLiveList == null) {
mMyLiveList =new ArrayList<>();
}
return mMyLiveList;
}
然后adapter中的getItemCount就直接拿到上⾯这个mMyLiveList的⼤⼩就可以了
接下来开始点击编辑的时候显⽰出imageview和recycleview中的底部全选反选部分
定义两个变量
private static final int MYLIVE_MODE_CHECK = 0;
private static final int MYLIVE_MODE_EDIT = 1;
//点击编辑的时候显⽰,顺便调mAdapter.setEditMode(mEditMode);赋值
mEditMode = mEditMode == MYLIVE_MODE_CHECK ? MYLIVE_MODE_EDIT : MYLIVE_MODE_CHECK; if (mEditMode == MYLIVE_MODE_EDIT) {
activity_btn.setText("取消");
ll_mycollection_bottom_dialog.setVisibility(View.VISIBLE);
editorStatus = true;
} else {
activity_btn.setText("编辑");
ll_mycollection_bottom_dialog.setVisibility(View.GONE);
editorStatus = false;
onRefresh();
}
mAdapter.setEditMode(mEditMode);
//当然,adapter中也有先关的变量在记录
private static final int MYLIVE_MODE_CHECK = 0;
int mEditMode = MYLIVE_MODE_CHECK;
public void setEditMode(int editMode) {
mEditMode = editMode;
notifyDataSetChanged();
}
//在onBindViewHolder中做显⽰和隐藏的操作.
holder.setIsRecyclable(false); // 为了条⽬不复⽤
//显⽰和隐藏
if (mEditMode == MYLIVE_MODE_CHECK) {
holder.mCheckBox.setVisibility(View.GONE);
} else {
holder.mCheckBox.setVisibility(View.VISIBLE);
为了⽅便记录选中的状态,在bean⾥⾯⽤个变量记起来
public boolean isSelect;
public boolean isSelect() {
return isSelect;
}
public void setSelect(boolean isSelect) {
this.isSelect = isSelect;
}
//然后点击条⽬选中和不选中的时候为Imageview设置不同的图⽚
if(myLive.isSelect()) {
holder.mCheckBox.setImageResource(R.mipmap.ic_checked);
}else{
holder.mCheckBox.setImageResource(R.mipmap.ic_uncheck);
android layout布局}
//在adapter中暴漏⼀个Item的点击事件的接⼝
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论