Recyclerview 实现多选,单选,全选,反选,批量删除的步骤
1.在Recyclerview布局中添加上底部的全选和反选按钮,删除按钮,和计算数量等控件
2.这里选中的控件没有用checkbox来做,用的是imageview,选中和不选中其实是两张图片
3.默认是不显示选中的控件的,点击编辑的时候显示,点击取消的时候隐藏
4.通过adapter和activity数据之间的传递,然后进行具体的操作
具体代码如下:
在recyclerview的布局中写全选,反选,删除,计数等相应的控件
//清单文件删除标题 ,换成返回按钮
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
//对应的主布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.eightgroup.wlb20171106.MainActivity"> <RelativeLayout android:id="@+id/one" android:background="#09f" android:layout_width="match_parent" android:layout_height="50dp"> <Button android:text="返回" android:id="@+id/back" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:textSize="32sp" android:text="我的收藏" android:textColor="#fff" android:layout_centerHorizontal="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:textColor="#fff" android:textSize="32sp" android:layout_alignParentRight="true" android:text="编辑" android:id="@+id/text_edit" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> <HorizontalScrollView android:id="@+id/hor" android:layout_below="@+id/one" android:layout_width="wrap_content" android:layout_height="wrap_content"> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:text="商品" android:textSize="30dp" android:textColor="@color/colorAccent" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:text="路线" android:textSize="30dp" android:layout_marginLeft="100dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </HorizontalScrollView> <android.support.v7.widget.RecyclerView android:layout_below="@+id/hor" android:id="@+id/recycler" android:layout_width="wrap_content" android:layout_height="600dp"> </android.support.v7.widget.RecyclerView> <LinearLayout android:layout_below="@+id/recycler" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <CheckBox android:id="@+id/qb" android:text="全选" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/shanchu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="删除" /> </LinearLayout> </RelativeLayout>
//对应的解析的布局
对应的适配器<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" xmlns:fresco="http://schemas.android.com/apk/res-auto"> <CheckBox android:id="@+id/checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/img" android:layout_width="50dp" android:layout_height="50dp" fresco:placeholderImage="@mipmap/ic_launcher" fresco:placeholderImageScaleType="focusCrop" fresco:roundAsCircle="true" /> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
public class HomeAdaper extends RecyclerView.Adapter { Context context; List<Newss.SongListBean> song_list; // 创建一个map集合 用来保存checkbox选中状态 public HashMap<Integer,Boolean> isSelected; public HomeAdaper(Context context, List<Newss.SongListBean> song_list) { this.context = context; this.song_list = song_list; isSelected = new HashMap<>(); addisSeleted(); } private void addisSeleted() { for (int i = 0 ; i < song_list.size();i++){ isSelected.put(i,false); } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { MyViewHolder holder1 = new MyViewHolder(LayoutInflater.from( context).inflate(R.layout.listview, parent, false)); return holder1; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { MyViewHolder holder1 = (MyViewHolder) holder; holder1.tv.setText(song_list.get(position).getTitle()); holder1.draweeView1.setImageURI(song_list.get(position).getPic_big()); //创建DraweeController DraweeController controller = Fresco.newDraweeControllerBuilder() //重试之后要加载的图片URI地址 .setUri(song_list.get(position).getPic_big()) //设置点击重试是否开启 .setTapToRetryEnabled(true) //动画播放 .setAutoPlayAnimations(true) //设置旧的Controller .setOldController(holder1.draweeView1.getController()) //构建 .build(); //设置DraweeController holder1.draweeView1.setController(controller); // 设置checkbox的选中状态 holder1.qb.setChecked(isSelected.get(position)); holder1.qb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { // 每次将条目的checkbox状态存入hashmap isSelected.put(position,b); } }); } @Override public int getItemCount() { return song_list.size(); } class MyViewHolder extends RecyclerView.ViewHolder { SimpleDraweeView draweeView1; TextView tv; CheckBox qb; public MyViewHolder(View view) { super(view); tv = (TextView) view.findViewById(R.id.tv); draweeView1 = (SimpleDraweeView) view.findViewById(R.id.img); qb = view.findViewById(R.id.checkbox); } } }
//下面就是对应的主页面
最后删除的话就调删除的接口,遍历这个bean,判断当前的状态如果是选中的状态,就删除! 这样就OK了 !!!
public class MainActivity extends AppCompatActivity implements IView { RecyclerView recycler; HomeAdaper homeadper; List<Newss.SongListBean> song_list; UserPresenter userpresenter; Button shanchu ,back; CheckBox qb; boolean isnoCheckAll = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); shanchu = (Button)findViewById(R.id.shanchu); back = (Button)findViewById(R.id.back) ; qb = (CheckBox)findViewById(R.id.qb) ; recycler = (RecyclerView)findViewById(R.id.recycler); recycler.setLayoutManager(new LinearLayoutManager(this)); userpresenter = new UserPresenter(this); userpresenter.getUser(Api.HOME_URL); qb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { if (b) { isnoCheckAll = true; for (int i = 0; i < homeadper.isSelected.size(); i++) { homeadper.isSelected.put(i, true); } } else { for (int i = 0; i < homeadper.isSelected.size(); i++) { homeadper.isSelected.put(i, false); } isnoCheckAll = false; } homeadper.notifyDataSetChanged(); } }); shanchu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (isnoCheckAll) { homeadper.song_list.clear(); homeadper.notifyDataSetChanged(); } else { for (int i = 0; i < homeadper.isSelected.size(); i++) { if(homeadper.isSelected.get(i)==true) { homeadper.song_list.remove(i); } } homeadper.notifyDataSetChanged(); } } }); back.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); } @Override public void getNews(ArrayList<Newss.SongListBean> song_list) { Log.d("mylog", "getNews: 进来了" + song_list.get(0).getTitle()); recycler.setAdapter(homeadper =new HomeAdaper(MainActivity.this,song_list)); } }