Android RecyclerView设置多选
本篇文章记录如何使用recyclerView,通过适配器来实现recyclerView的多选。点击多选按钮时每个item后面会显示一个checkBox,取消时checkBox会隐藏。要点如下:
- recyclerView+Adapter
- 自定义view的dialog
- 自定义的popupWindow
一、实现基本的recyclerView+Adapter
/**
* Created by stephen on 17-8-12.
* 文件列表recyclerView适配器
*/
public class RecordingsAdapter extends RecyclerView.Adapter<RecordingsAdapter.ViewHolder> {
private List<RecordingFiles> recordingFileList;
private static List<RecordingFiles> multipleFileList=new ArrayList<>();//多选选择的文件集合
private SavedRecordingsFragment s;
private boolean ifRenameClicked=false;
private boolean ifDeleteClicked=false;
private boolean ifMultipleDeleteClicked=false;
private PopupWindowRename popupWindowRename;//重命名popupWindow
private PopupWindowDelete popupWindowDelete;//确认删除popupWindow
private MultipleDeletePopup multipleBottomDialog;//多选删除popupWindow
private static final String PLAY_DIALOG="com.example.stephen.soundrecorder.action.PLAY_DIALOG";
private static final String NOTIFY_RECYCLER_VIEW="com.example.stephen.soundrecorder.action.NOTIFY_RECYCLER_VIEW";
//录音文件存储父路径
final private File fileDir=new File(Environment.getExternalStorageDirectory(),"/RecordFile");
private Dialog bottomDialog;//底部选择dialog(delete,rename,share,multiple)
private boolean ifMultiple=false;//是否多选
static class ViewHolder extends RecyclerView.ViewHolder{
TextView fileName,fileLength,fileData;
CheckBox checkBox;
View view;
public ViewHolder(View itemView) {
super(itemView);
view=itemView;
fileName=(TextView) itemView.findViewById(R.id.name_recording_file);
fileLength=(TextView)itemView.findViewById(R.id.length_recording_file);
fileData=(TextView)itemView.findViewById(R.id.data_recording_file);
checkBox=(CheckBox)itemView.findViewById(R.id.check_recording_file);
}
}
public RecordingsAdapter(List<RecordingFiles> list, SavedRecordingsFragment s) {
this.recordingFileList =list;
this.s=s;
}
/**
* 按键响应,点击item播放录音
* 长按item滑出底部dialog,选择删除/重命名操作
* @param parent
* @param viewType
*/
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_item_recordings,parent,false);
final ViewHolder viewHolder=new ViewHolder(view);
viewHolder.view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//若在多选删除情况下,点击item选择/取消checkbox,不能播放
if (ifMultiple){
if (viewHolder.checkBox.isChecked()){
viewHolder.checkBox.setChecked(false);
}else viewHolder.checkBox.setChecked(true);
return;
}
int position = viewHolder.getAdapterPosition();
RecordingFiles recordingFiles = recordingFileList.get(position);
Gson gson=new Gson();
String recordJsonStr= gson.toJson(recordingFiles);
Intent intent = new Intent(PLAY_DIALOG);
intent.putExtra("record_json",recordJsonStr);