Android 列表的多選
阿新 • • 發佈:2018-12-11
我做開發遇到一個多選的需求,也不是太難,挺好做的,所以就分享個大家。那就是列表的多選,不多說了,直接上程式碼。
基本上都是在介面卡中操作。
package com.example.mvcframework.adapter; import android.Manifest; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.util.SparseBooleanArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView; import android.widget.RadioButton; import android.widget.TextView; import com.bumptech.glide.Glide; import com.example.mvcframework.R; import com.example.mvcframework.activity.CultivateActivity; import com.example.mvcframework.activity.FileDisplayActivity; import com.example.mvcframework.entity.CultivateEntity; import com.example.mvcframework.entity.Test_Tree_Assart; import com.example.mvcframework.utils.Urls; import java.util.ArrayList; import java.util.List; import pub.devrel.easypermissions.EasyPermissions; public class Exame_Ti_Adapter extends RecyclerView.Adapter<Selects_ViewHolder>{ private CultivateActivity context; private List<CultivateEntity.DataBean.ChildrenBean> children; private int type; private boolean isselect; private SparseBooleanArray mSelectedPositions = new SparseBooleanArray(); public Exame_Ti_Adapter( CultivateActivity context,List<CultivateEntity.DataBean.ChildrenBean> children){ this.context=context; this.children=children; } public void setType(int type){ this.type=type; notifyDataSetChanged(); } public void isSelect(boolean isselcet){ this.isselect=isselcet; notifyDataSetChanged(); } @Override public Selects_ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item_wdxz_textlayout,parent,false); Selects_ViewHolder viewHolder =new Selects_ViewHolder(view); return viewHolder; } @Override public void onBindViewHolder(Selects_ViewHolder holder, int position) { CultivateEntity.DataBean.ChildrenBean childrenBean = children.get(position); holder.text_jtsz.setText(childrenBean.getOB_Name()); holder.tvJs.setText("講師:"+ childrenBean.getOB_lecturer()); holder.tvlx.setText("型別:"+childrenBean.getBOD_Name()); int i = childrenBean.getCreateDateTime().indexOf(" "); String substring = childrenBean.getCreateDateTime().substring(0, i); holder.show_dn_time.setText(substring); Glide.with(context).load(Urls.DZ+childrenBean.getOB_Phone()).crossFade().placeholder(R.mipmap.base_map).into(holder.iv_icon); if (isselect==true){ holder.rb_option1.setChecked(true); setItemChecked(position,true); boolean b = mSelectedPositions.get(position); Log.d("blloen", "onBindViewHolder: "+b); }else{ holder.rb_option1.setChecked(isItemChecked(position)); } if (type==0){ holder.rb_option1.setVisibility(View.GONE); }else{ holder.rb_option1.setVisibility(View.VISIBLE); } holder.rb_option1.setOnClickListener(view -> { if (isItemChecked(position)) { setItemChecked(position, false); holder.rb_option1.setChecked(false); } else { setItemChecked(position, true); holder.rb_option1.setChecked(true); } }); holder.buttonCk.setOnClickListener(view -> { String[] perms = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; if (!EasyPermissions.hasPermissions(context, perms)) { EasyPermissions.requestPermissions(context, "需要訪問手機儲存許可權!", 10086, perms); } else { FileDisplayActivity.show(context, Urls.DZ+children.get(position).getOB_Pdf()); } }); } @Override public int getItemCount() { return children.size(); } //根據位置判斷條目是否選中 private boolean isItemChecked(int position) { return mSelectedPositions.get(position); } //設定給定位置條目的選擇狀態 private void setItemChecked(int position, boolean isChecked) { mSelectedPositions.put(position, isChecked); } public List<String> getSelectedItem() { List<String>selectList=new ArrayList<>(); for (int i = 0; i < children.size(); i++) { if (isItemChecked(i)) { selectList.add(children.get(i).getID()); } } return selectList; } } class Selects_ViewHolder extends RecyclerView.ViewHolder{ public RadioButton rb_option1; public ImageView iv_icon; public TextView text_jtsz,tvlx,tvJs,show_dn_time; public Button buttonCk; public Selects_ViewHolder(View itemView) { super(itemView); rb_option1 = (RadioButton) itemView.findViewById(R.id.radio); iv_icon = (ImageView) itemView.findViewById(R.id.iv_icon); text_jtsz= (TextView) itemView.findViewById(R.id.text_jtsz); tvlx= (TextView) itemView.findViewById(R.id.tvlx); tvJs= (TextView) itemView.findViewById(R.id.tvJs); buttonCk= (Button) itemView.findViewById(R.id.buttonCk); show_dn_time= (TextView) itemView.findViewById(R.id.show_dn_time);//下載時間 } }
最後就是通過adapter.getSelectedItem()。獲取到一個集合。完成!