Android列表实现单选、多选、全选、取消、删除

1.init方法中的实现

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

private void init() {
        isSelected = new HashMap<Integer, Boolean>();
        isVisible = new HashMap<Integer, Boolean>();
        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<String> 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.效果图

这里写图片描述

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在uniapp中实现单选多选全选的方式有很多种,下面是其中一种可行的方法: 1. 单选 首先,在数据源中添加一个选中属性(例如isSelected),表示该项是否被选中。然后,在模板中使用v-model绑定isSelected属性即可实现单选。 ```html <template> <div> <div v-for="(item, index) in dataList" :key="item.id"> <input type="radio" :value="index" v-model="selectedIndex"> {{ item.name }} </div> </div> </template> <script> export default { data() { return { selectedIndex: -1, dataList: [ { id: 1, name: '选项1', isSelected: false }, { id: 2, name: '选项2', isSelected: false }, { id: 3, name: '选项3', isSelected: false } ] } } } </script> ``` 2. 多选 同样,在数据源中添加一个选中属性(例如isSelected),表示该项是否被选中。然后,在模板中使用v-model绑定一个数组,选中的项会被添加到该数组中。 ```html <template> <div> <div v-for="(item, index) in dataList" :key="item.id"> <input type="checkbox" :value="index" v-model="selectedList"> {{ item.name }} </div> </div> </template> <script> export default { data() { return { selectedList: [], dataList: [ { id: 1, name: '选项1', isSelected: false }, { id: 2, name: '选项2', isSelected: false }, { id: 3, name: '选项3', isSelected: false } ] } } } </script> ``` 3. 全选 首先,在数据源中添加一个选中属性(例如isSelected),表示该项是否被选中。然后,添加一个全选按钮,当点击全选按钮时,将所有项的isSelected属性设置为true或false即可实现全选。 ```html <template> <div> <button @click="selectAll">全选</button> <div v-for="(item, index) in dataList" :key="item.id"> <input type="checkbox" :value="index" v-model="selectedList"> {{ item.name }} </div> </div> </template> <script> export default { data() { return { selectedList: [], dataList: [ { id: 1, name: '选项1', isSelected: false }, { id: 2, name: '选项2', isSelected: false }, { id: 3, name: '选项3', isSelected: false } ] } }, methods: { selectAll() { this.dataList.forEach(item => { item.isSelected = true }) this.selectedList = this.dataList.map((item, index) => index) } } } </script> ``` 以上是实现单选多选全选的简单示例,具体的实现方式可以根据实际需要进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值