listview-更新 getCheckedItemPositions() 方法

问题描述

更新 getCheckedItemPositions() 方法
我使用 listview 中的 checkboxes,然后设置成 multi_choice。
如果我执行一次 getCheckeItemPositions 来获的选中的 listview 选项,程序可以很好的运行。
但是如果我再执行一次,取消其中的一些选项,系统依然认为还是选择了的。我只能添加更多的 items 来""checked"",如何解决这个问题?

sp = new SparseBooleanArray();        lTransfer = new ArrayList<String>();        ListView info = (ListView)findViewById(R.id.info);        sp = info.getCheckedItemPositions();            Log.d(""Watcher""Arraysize:"" + sp.size());        for(int i = 0; i< sp.size();i++){            Log.d(""Watcher""Arrayfound:"" + info.getAdapter().getItem(sp.keyAt(i)).toString().split("":"")[0]);            lTransfer.add(info.getAdapter().getItem(sp.keyAt(i)).toString().split("":"")[0]);        }public void updateInfo(){    ListView info = (ListView)findViewById(R.id.info);    info.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);    info.setItemsCanFocus(false);    info.setOnItemClickListener(new InfoListener());    lSpin = new ArrayAdapter<String>(this R.layout.list_item lToAdd);             info.setAdapter(lSpin);   }

解决方案

我也是最近在研究这个问题,这个方法好像是选择了就会加进去,但是要判断是否选中的话,需要根据sp.get(i)的值为true或false判断,true为选中

解决方案二:

List<String> checklist = new ArrayList<String>();    int id = item.getItemId();    if (id == R.id.deleteId) {        // 获得选中的item对象        // 此对象中存储的是你选择过的item对象postion/checnked的值        SparseBooleanArray sp = lsv.getCheckedItemPositions();        // Log.i(""TAG""size:"" + sp.size());        for (int i = 0; i < sp.size(); i++) {            int key = sp.keyAt(i);            boolean value = sp.valueAt(i);            Log.i(""tag"" key + ""/"" + value);            if (value) {                checklist.add(list.get(key));            }        }        // 从list集合中删除选中的item对象        list.removeAll(checklist);        // 清除checkedtextview        lsv.clearChoices();        // 更新listveiw中数据的显示        adapter.notifyDataSetChanged();

解决方案三:

List<String> checklist = new ArrayList<String>();    int id = item.getItemId();    if (id == R.id.deleteId) {        // 获得选中的item对象        // 此对象中存储的是你选择过的item对象postion/checnked的值        SparseBooleanArray sp = lsv.getCheckedItemPositions();        // Log.i(""TAG""size:"" + sp.size());        for (int i = 0; i < sp.size(); i++) {            int key = sp.keyAt(i);            boolean value = sp.valueAt(i);            Log.i(""tag"" key + ""/"" + value);            if (value) {                checklist.add(list.get(key));            }        }        // 从list集合中删除选中的item对象        list.removeAll(checklist);        // 清除checkedtextview        lsv.clearChoices();        // 更新listveiw中数据的显示        adapter.notifyDataSetChanged();
时间: 2025-01-01 19:13:20

listview-更新 getCheckedItemPositions() 方法的相关文章

Android实现Listview异步加载网络图片并动态更新的方法_Android

本文实例讲述了Android实现Listview异步加载网络图片并动态更新的方法.分享给大家供大家参考,具体如下: 应用实例:解析后台返回的数据,把每条都显示在ListView中,包括活动图片.店名.活动详情.地址.电话和距离等. 在布局文件中ListView的定义: <ListView android:id="@id/maplistview" android:background="@drawable/bg" android:layout_width=&qu

Android实现Listview异步加载网络图片并动态更新的方法

本文实例讲述了Android实现Listview异步加载网络图片并动态更新的方法.分享给大家供大家参考,具体如下: 应用实例:解析后台返回的数据,把每条都显示在ListView中,包括活动图片.店名.活动详情.地址.电话和距离等. 在布局文件中ListView的定义: <ListView android:id="@id/maplistview" android:background="@drawable/bg" android:layout_width=&qu

android实现listview分页的方法

  本文实例讲述了android实现listview分页的方法.分享给大家供大家参考.具体分析如下: 最近做了下listview的分页,跟WEB上的分页是一个意思,需要那几个分页参数,不同的是sqlite中分页的查询语句,简便的方法需要用Limit,Offset关键字,前者是查询每页展示的记录数,后者是越过多少记录数,说得明白点就是忽略前面多少行记录之后,取多少行记录 我分页采用了一个重要的类Page,通过封装Page类,做为参数传递进来,返回出去也是个Page对象 ? 1 2 3 4 5 6

editView 搜索listview更新

问题描述 editView 搜索listview更新 ava.lang.ArrayIndexOutOfBoundsException: length=2; index=2 at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:7374) at android.widget.ListView.layoutChildren(ListView.java:1730) at android.widget.AbsList

android实现listview分页的方法_Android

本文实例讲述了android实现listview分页的方法.分享给大家供大家参考.具体分析如下: 最近做了下listview的分页,跟WEB上的分页是一个意思,需要那几个分页参数,不同的是sqlite中分页的查询语句,简便的方法需要用Limit,Offset关键字,前者是查询每页展示的记录数,后者是越过多少记录数,说得明白点就是忽略前面多少行记录之后,取多少行记录 我分页采用了一个重要的类Page,通过封装Page类,做为参数传递进来,返回出去也是个Page对象 import java.util

Android ListView 单条刷新方法实践及原理解析

对于使用listView配合adapter进行刷新的方法大家都不陌生,先刷新adapter里的数据,然后调用notifydatasetchange通知listView刷新界面. 方法虽然简单,但这里面涉及到一个效率的问题,调用notifydatasetchange其实会导致adpter的getView方法被多次调用 (画面上能显示多少就会被调用多少次),如果是很明确的知道只更新了list中的某一个项的数据(比如用户点击list某一项后更新该项的显示状态,或者 后台回调更新list某一项,等等),

独辟蹊径解决百度快照不更新的方法

百度快照是衡量一个网站权重高低和关键词排名高低的不可忽视的因素,国内针对百度进行seo的站长朋友无时无刻不在想办法让自己的网站快照隔天更新,但是有时候往往会事与愿违,快照长期不更新是站长的一大心病.笔者根据自己的经验,总结了以下几种让百度快照隔天更新的方法,希望对大家有用. 一.到百度投诉中心进行投诉 这个方法屡试不爽,我们天天更新网站内容,百度快照就天天更新,只要一停止更新网站,百度快照就停滞不前.这也是很多站长苦恼的事情,毕竟我们很难做到网站天天更新,那么到百度投诉中心进行投诉无疑是最快的解

在Word文档中插入当前日期并自动更新的方法

在Word文档中插入当前日期并自动更新的方法   图1 红头文件 解决方案一 利用"日期和时间"功能在文档中插入当前日期. 操作方法 ※利用"日期和时间"功能在文档中插入当前日期※ 步骤1.将光标定位到需要插入当前日期处. 步骤2.如图 2所示,单击"插入"选项卡→"文本"组中的"日期和时间"按钮,打开"日期和时间"对话框. 图2 打开"日期和时间"对话框 步骤3.如

Word 2010文档自动生成目录和更新目录方法

  先说一下如果要使用自动生成目录功能,需要对文章中对应的标题设置成相应的标题格式. 1.在此以Word 2010为例进行演示.正文内容见下图: 文档自动生成目录和更新目录方法-word2010文档生成目录"> 2.首先对作为目录的文字进行设置(如下图中的"1.简介").选中文字,鼠标右键弹出菜单,点击"段落". 3.设置大纲级别."1.简介"的大纲级别默认为"正文文本",其为一级目录,因此,将其修改为&quo