【第21期】观点:人工智能到底用 GPU?还是用 FPGA?

项目使用中listview多选或者说是PullToRefreshListView多选的个人解决方案

原创 2016年05月31日 23:41:05

近期将会陆续分享、总结做过的项目中遇到的技术点,以便下次用到的时候可以快速的实现相关的功能~

下面介绍的是我在项目当中碰到的listview多选或者说是PullToRefreshListView(我目前用的上拉刷新,下拉加载更多的数据加载框架)的多选。

我相信很多人都会碰到多选的问题,一般item都会有CheckBox控件。另外也可以使用CheckedTextView控件(类CheckedTextView继承超类TextView并实现Checkable接口。当ListView的setChoiceMode方法并设定为CHOICE_MODE_SINGLE或者CHOICE_MODE_MULTIPLE,而非CHOICE_MODE_NONE时,使用此类是很有用的。以上为引用别人的话)。在这我用的是CheckBox控件
(一)
(一)

二
(二)

三
(三)

下面主要分析listview多选,PullToRefreshListView多选可在最后的下载链接的demo里面找到~
listview多选,个人认为关键在于准确记录选中或者没选中item的位置,这里我是用HashMap来存储选中或者没选中相关的状态
首先item的onItemClick方法里面:

        final List<String> members = new ArrayList<String>();
        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                CheckBox checkBox = (CheckBox) view.findViewById(R.id.item_station_choose_checkbox);
                checkBox.toggle();
                mStringMap.put(mPickAdapter.getItem(position).stationId, checkBox.isChecked());

                //过滤状态
                if (mClearSearchBtn.getVisibility() == View.VISIBLE) { //搜索框最右边的"*"图标出现时候
                    if (choosedMembers != null && choosedMembers.size() > 0) {

                        int length = mPickAdapter.getCount();
                        if (length > 0) {
                            String username = mPickAdapter.getItem(position).stationId;
                            if (choosedMembers.contains(username)) {
                                choosedMembers.remove(username);
                            } else {
                                if (members.size() > 0) {
                                    if (members.contains(username)) {
                                        members.remove(username);
                                    } else {
                                        members.add(username);
                                    }

                                } else {
                                    members.add(username);
                                }

                            }

                        }
                    } else {
                        int length = mPickAdapter.getCount();
                        if (length > 0) {
                            for (int i = 0; i < length; i++) {
                                String username = mPickAdapter.getItem(i).stationId;
                                if (mStringMap.get(username)) {
                                    members.add(username);
                                }
                                if(members.size()>0 && !mStringMap.get(username) && members.contains(username) ){
                                    members.remove(username);
                                }
                            }
                        }
                    }

                } else {
                    final List<String> members = getToBeCurrentAddMembers();
                    if (members != null && members.size() > 0) {
                        choosedMembers.clear();
                        choosedMembers.addAll(members);
                    } else {
                        choosedMembers.clear();
                    }

                }

            }

        });

恩,上述代码有点长,我的思路是:
首先:

CheckBox checkBox = (CheckBox) view.findViewById(R.id.item_station_choose_checkbox);
                checkBox.toggle();
                mStringMap.put(mPickAdapter.getItem(position).stationId, checkBox.isChecked());

通过以上代码,在item选中或者没选中时,都用mStringMap记录点选后的状态
其次: List choosedMembers,用choosedMembers来记录取消图标(*)没出现时选中的item,List 里面的String类型对应的是你打算通过编号ID方式来查找对应item的 item的编号ID(原谅这里有点绕口,意思就是你想通过什么方式来查找对应的item,那么那个String就对应那个方式);
最后: 当取消图标()没出现时,其实相当于直接listview多选,没有搜索功能,所以,要先获取当前选中了哪些item,然后choosedMembers clear清空,重新赋值最新状态的数据。另外,当取消图标()出现时,分两种情况,第一种是:choosedMembers 不为空,那么当进入到搜索过滤阶段(即是取消图标(*)出现阶段),如果过滤到的item已经处于选中状态,那么就要将该item从choosedMembers 中移除,

 else {
     if (members.size() > 0) {
         if (members.contains(username)) {
             members.remove(username);
        } else {
             members.add(username);
        }
       } else {
           members.add(username);
       }
    }

上述中的members,我想起来了,是之前右上角title处的“确定”按钮还要加入一个统计选中item个数的小功能,下一篇文章再加上那功能了~~
第二种是:choosedMembers 为空,那么当进入到搜索过滤阶段(即是取消图标(*)出现阶段),其实里面的代码逻辑还是跟上面说的那样,是因为之前有一个统计选中item个数的小功能,所以可以暂时先忽略,不会影响到当前demo的整体逻辑~~
最后想说的是:搜索过滤方面,我用的是Filter类,具体逻辑看代码,应该容易理解,哈哈,偷懒一下~

下载链接:

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

ListView多选功能

项目中需要实现这么一个功能,界面右上角”编辑”,点击变成“完成”,同时ListView的item上显示出勾选图标,用户可以多选,选择以后点击完成,刷新列表 界面如下 思路:首先创建it...

Android-PullToRefresh 使用心得

目前下拉刷新已经满大街都是,在自己的应用如果不使用这个模式的话,出门都不好意思和人家打招呼,该文章就是简单探讨下针对于 github 上的这个开源项目的使用心得。 为什么是它?因为在 stackov...
  • sbvfhp
  • sbvfhp
  • 2015-04-09 14:43
  • 28013

PullToRefreshListView用法

一、导入library github地址:https://github.com/chrisbanes/Android-PullToRefresh as中file-》new-》import modu...

PullToRefreshListView库的使用

下载地址:PullRefreshLibrary如果你的库导入成功,可以看到下列情况,就可以开始使用PullToRefreshListView了。首先看布局代码(activity_refresh.xml...

下拉刷新ListView讲解,自定义PullToRefreshListView

思路 关于下拉刷新的ListView的实现,思路主要有两种: 1 . 用LinearLayout包裹一个refreshHeadView和一个listView , 触摸时通过改变refreshHea...

PullToRefreshListView总结

PullToRefreshListView工作原理: 整体是个LinearLayout,包含一个Header,一个Footer,中间夹着一个ListView,其中Header和Footer的位置居于...

Android PullToRefresh 实战(ListView)

今天带来最火的下拉刷新,上拉加载控件实战: Android PullToRefresh github地址:https://github.com/chrisbanes/Android-PullToRef...

PullToRefreshListView 应用讲解

原文地址 PullToRefreshListView 用法和ListView 没有什么区别  listview能用的属性 pulltorefresh也能用 我一直认为动手是最好的学习方法....

PullToRefreshListView注意事项

PullToRefreshListView注意事项

ListView选中后错位问题及解决方案(含单选和多选)

一、单选错位 1、在监听处设置选中的位置 @Override public void onItemClick(AdapterView parent, View view, int position,...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)