博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android列表实现单选、多选、全选、取消、删除
阅读量:6854 次
发布时间:2019-06-26

本文共 5620 字,大约阅读时间需要 18 分钟。

1.init方法中的实现

定义2个HashMap用于存储已选择的及是否可见的标志

private void init() {        isSelected = new HashMap
(); isVisible = new HashMap
(); if (mData != null && mData.size() > 0) { for (int i = 0; i < mData.size(); i++) { isSelected.put(i, false); isVisible.put(i, false); } } }复制代码

2.getView方法中的实现

@Override    public View getView(int i, View view, ViewGroup viewGroup) {        ViewHolder holder;        if (view==null){            view= LayoutInflater.from(mContext).inflate(R.layout.item_fund,viewGroup,false);            holder=new ViewHolder();            view.setTag(holder);            holder.tv_name=view.findViewById(R.id.tv_name);            holder.tv_code=view.findViewById(R.id.tv_code);            holder.checkBox=view.findViewById(R.id.checkBox);        }else {            holder=(ViewHolder) view.getTag();        }        if (mData!=null){            holder.tv_name.setText(mData.get(i).getName());            holder.tv_code.setText(mData.get(i).getCode());            holder.checkBox.setTag(i);            if (type.equals("delete")){                if (isSelected.get(i)){                    isSelected.put(i,false);                }            }else {            }            holder.checkBox.setChecked(isSelected.get(i));            if (isVisible.get(i)) {                holder.checkBox.setVisibility(View.VISIBLE);            } else {                holder.checkBox.setVisibility(View.GONE);            }        }        return view;    }复制代码

3.Activity中的实现

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView
adapterView, View view, int position, long l) { if (isEdit) { mAdapter.type = "select"; FundListAdpater.ViewHolder holder = (FundListAdpater.ViewHolder) view.getTag(); holder.checkBox.toggle(); mAdapter.isSelected.put(position, holder.checkBox.isChecked()); } } }); @Override public void onClick(View view) { isHasSelect = false; for (int i = 0; i < datas.size(); i++) { if (mAdapter.isSelected.get(i)) { isHasSelect = true; break; } } switch (view.getId()) { case R.id.tv_edit: if (datas != null && datas.size() > 0) { if (isEdit) { tv_edit.setText("编辑"); ll_bottom.setVisibility(View.GONE); for (int i = 0; i < datas.size(); i++) { mAdapter.isVisible.put(i, false); } mAdapter.notifyDataSetChanged(); isEdit = false; } else { tv_edit.setText("完成"); ll_bottom.setVisibility(View.VISIBLE); for (int i = 0; i < datas.size(); i++) { mAdapter.isVisible.put(i, true); } mAdapter.notifyDataSetChanged(); isEdit = true; } } break; case R.id.tv_cancel: mAdapter.type = "select"; tv_cancel.setSelected(true); tv_delete.setSelected(false); if (isAllSelect) { for (int i = 0; i < datas.size(); i++) { mAdapter.isSelected.put(i, false); } } else { for (int i = 0; i < datas.size(); i++) { mAdapter.isSelected.put(i, true); } } mAdapter.notifyDataSetChanged(); isAllSelect = !isAllSelect; break; case R.id.tv_delete: mAdapter.type = "delete"; if (isHasSelect) { tv_cancel.setSelected(false); tv_delete.setSelected(true); if (deleteOrderNoList != null) { deleteOrderNoList.clear(); } for (int i = 0; i < datas.size(); i++) { if (mAdapter.isSelected.get(i)) { //FundListAdpater.ViewHolder holder = (FundListAdpater.ViewHolder) lv.getChildAt(i-lv.getFirstVisiblePosition()).getTag(); deleteOrderNoList.add(datas.get(i).getCode());//选择删除的订单号holder.tv_code.getText().toString() FundBean deleteOrder = (FundBean) lv.getItemAtPosition(i); deleteDatas.add(deleteOrder); } } deleteFund(deleteOrderNoList); } break; } } private void deleteFund(List
deleteOrderNoList) { if (datas != null) { datas.removeAll(deleteDatas); mAdapter.notifyDataSetChanged(); mAdapter.notifyDataSetInvalidated(); } Toast.makeText(this, deleteOrderNoList.toString(), Toast.LENGTH_LONG).show(); if (datas.size() == 0) { tv_edit.setText("编辑"); ll_bottom.setVisibility(View.GONE); for (int i = 0; i < datas.size(); i++) { mAdapter.isVisible.put(i, false); } mAdapter.notifyDataSetChanged(); isEdit = false; } }复制代码

4.效果图

转载于:https://juejin.im/post/5a70648b6fb9a01cbc6eafb7

你可能感兴趣的文章
epoll使用具体解释(精髓)
查看>>
JCronTab 定时调用
查看>>
【转】Android中BindService方式使用的理解
查看>>
BDB (Berkeley DB)简要数据库(转载)
查看>>
lsof基本使用
查看>>
数据类型及其空间大小,vs2012实测
查看>>
Socket编程实践(12) --UDP编程基础
查看>>
基于最简单的FFmpeg采样读取内存读写:内存玩家
查看>>
Bengio最新博文:深度学习展望
查看>>
使用友盟进行apk的自动更新
查看>>
wpa_cli 连接 wifi
查看>>
82. NotesclientPrint相同的信息,以状态栏的问题
查看>>
没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
查看>>
网络爬虫+HtmlAgilityPack+windows服务从博客园爬取20万博文
查看>>
acdream 1431 Sum vs Product
查看>>
2015/08/15心情
查看>>
hdu1796 How many integers can you find
查看>>
Synchronized之二:synchronized的实现原理
查看>>
项目属性-->生成事件-->后期生成事件命令行
查看>>
[dp] hdu 4472 Count
查看>>