Listview点击选中,双击取消选中

在Android中,通过设置ListView的choicemode为'singleChoice'可实现单击选择项的效果,但默认情况下,再次点击同一项不会取消选中。本文介绍一种通过比较点击位置和状态来实现双击取消选中的方法,同时也表达了对更高效解决方案的期待。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Listview布局文件中加入choicemode = “singleChoice”即可实现点击item的选中效果。
如果不想要选中效果只需要myList.setSelector(new ColorDrawable(Color.TRANSPARENT));

但是默认效果的问题是单击某个item选中之后,再点击一次,并没有去掉选中的效果。

我目前的解决方法是通过position判断是否选中相当位置,再通过isSelected判断当前状态
如果position与上次点击的position相当,且上一次的状态是选中,则通过myList.setSelector(new ColorDrawable(Color.TRANSPARENT));将背景设成原来的样子,并将isSelected状态改为Unselected

具体代码如下:

 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                myList.setSelector(new ColorDrawable(getResources().getColor(R.color.gray_white)));
                if (position==prePosition){
                    if(isSelected==UNSELECTED){
                        isSelected=SELECTED;
                        if (position>lock_listItems.size())
                            floatingActionButton.setVisibility(View.VISIBLE);
                    }
                    else{
                        isSelected=UNSELECTED;
                        floatingActionButton.setVisibility(View.INVISIBLE);
                        myList.setItemChecked(position,false);
                        //view.setBackgroundColor(getResources().getColor(R.color.white));
                        myList.setSelector(new ColorDrawable(Color.TRANSPARENT));

                    }

                }
                else {
                    isSelected=SELECTED;
                    if (position>lock_listItems.size())
                        floatingActionButton.setVisibility(View.VISIBLE);
                    else
                        floatingActionButton.setVisibility(View.INVISIBLE);
                    prePosition=position;
                }
                myList.forceLayout();

            }
        });

我觉得这个方法效率很低,如有更好的方法或官方api请告诉我。谢谢~~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值