Android RecyclerView设置多选

本文介绍了如何在Android中利用RecyclerView和Adapter实现多选功能。当点击多选按钮时,item后显示checkBox,长按触发底部dialog。点击多选后,底部dialog消失,checkBox可见并处于未选中状态。实现涉及adapter的更新、自定义dialog和popupWindow。当选定项目后,可通过删除按钮移除选定文件,并清除选择状态。
摘要由CSDN通过智能技术生成

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);
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值