安卓开发:listview长按进入多选删除操作

在实际开发中有好多多选删除的使用场景,我们现在遇到的是,listview 里边是一个 BaseAdapter 出来的列表

简单分析下,大概是需要这样操作,首先 listview的 item项里要有一个 多选框 这个多选框 默认是隐藏的。
一般情况下 点击是要进入详情页面。然后长按的话进入多选删除操作。所以我们这里要设定两个事件 分别为:
OnClickListener 和 OnLongClickListener

先看下布局文件中 设置了 checkBox 不可以被点击 以及隐藏 ,同时我还 设置了一个全局变量。去判断此时是否处雨多选状态。
以及全局设置了一个 map 。map 中存储了 每个项的id 以及选中状态。 这样在调用 Adapter的getView 方法时候可以去去根据多选
状态 以及 是否选中 去进行 选中操作
OnLongClickListener 事件 点击后进入操作状态。设置 CheckBox 显示 设置全局变量为多选状态

OnClickListener 根据多选状态 做操作

    <CheckBox
            android:id="@+id/cb_select"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="invisible"
            android:layout_gravity="center"
            android:clickable="false"
            />
class Videoad extends BaseAdapter {


        @Override
        public int getCount() {
            return videosList.size();
        }

        @Override
        public Object getItem(int i) {
            return i;
        }

        @Override
        public long getItemId(int i) {
            return i;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            // 1.解析布局文件 成为VIEW
            LayoutInflater inflater = LayoutInflater.from(getActivity());
            View view1 = inflater.inflate(R.layout.my_videocollect_item, viewGroup, false);
            //2.填充数据

            CheckBox cb_select = view1.findViewById(R.id.cb_select);
            if(isselect){
                cb_select.setVisibility(View.VISIBLE);
                if(deletemap.get(cid+"")){
                    cb_select.setChecked(true);
                }else{
                    cb_select.setChecked(false);
                }
            }
            LinearLayout video_item = view1.findViewById(R.id.video_item);

            final int vid = videosList.get(i).getId();
            video_item.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if(isselect){
                        boolean isseelctitem =    deletemap.get(""+cid);
                        if(isseelctitem ){
                            deletemap.put(""+cid,false);
                        }else{
                            deletemap.put(""+cid,true);
                        }
                        videoad.notifyDataSetChanged();
                    }else{
                        Intent intent = new Intent(getActivity().getApplicationContext(),Videodetail.class);
                        intent.putExtra("id", vid);
                        startActivity(intent);

                    }
                }
            });

            video_item.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {
                    isselect = true;
                    deleteall.setVisibility(View.VISIBLE);
                    videoad.notifyDataSetChanged();
                    return false;
                }
            });

            return view1;

        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值