Android ListView快速定位(二)
方法二:android:textFilterEnabled="true" + Filter
这个属性在android.widget.AbsListView下,要求adapter必须实现Filterable接口
参考: http://justcallmebrian.com/?p=149
实现步骤:
1.listview
布局文件中设置android:textFilterEnabled="true"
或代码中listview.setTextFilterEnabled(true);
2.adapter实现Filterable接口
Filterable接口很简单,就只有一个方法
这里要求返回一个Filter对象。
Filter是一个抽象类,需要自己写个类MyFilter,重写其中的方法
performFiltering方法,将用户输入的条件传过来,在这个方法中可以按照自己需要的条件过滤
publishResults中可以将过滤后的新数据传给adapter(通过一个全局变量 或者自己定义一个变量,提供get方法)
重写了上述两个方法后,外部可以通过adapter.getFilter().filter(s)完成过滤
另外,Filter还有一个内部类和一个内部接口
Filter.FilterListener中有一个onFilterComplete方法
Filter.FilterResults中有两个成员变量,用于存储过滤时的值
例: 实现MyFilter
1 |
private class MyFilter extends Filter{
@Override
|
例: 实现Filterable接口
1 |
public class MyAdapter extends BaseAdapter implements Filterable{
|
注意: 这里我犯了一个比较严重的错误
关于过滤后的数据filteredItems的存储,我原来是直接
1 |
filteredItems = (List<Map<String, String>>)results.values; |
adapter中的绑定数据的方法也是直接用"="
1 |
public void setData(List<Map<String, String>> list){
this.filteredItems = list;
|
因为我希望筛选的时候,如果条件为空,还是要把原来所有的数据都显示出来。
然而使用" = " 这个写法其实是将引用指给了我最原始的数据,前后虽然有2个变量,但是指向的是同一个空间。
那么,当我publishResults时,会先清空旧数据,一旦清空,我的数据就会被我清掉,再也找不回来。
解决办法:
后来,我声明时直接给它实例化、分配了新空间。
使用时统一使用addAll方法,这样就相当于把数据复制一份出来,对复制的数据进行清空。
那么我每一次筛选条件为空时,还是可以取到原始的所有数据,显示出来。
效果图:
Android ListView快速定位(二)的更多相关文章
- Android ListView快速定位(三)
方法三: android:fastScrollEnabled="true" 这个很简单,只要把属性设置了,就可以起作用了 不过这个滑块比较丑,当然网上也有自定义图片的例子. 参考 ...
- Android ListView快速定位(四)
方法四: 添加一个EditText,作为搜索框 + Filter 其实这个不算第四个方法,因为与第二个一样,主要是实现Filter. 但是对于EditText的监听,我以前也没有写过,所以也记录一下. ...
- Android ListView快速定位(一)
方法一: SectionIndexer接口 + 索引列表 参考:http://www.apkbus.com/android-69999-1-1.html 所谓section 就是一组有共性的item, ...
- Android apk快速定位、灰色按钮克星--DroidSword
本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80994434 在进行Android应用程序的逆向分析时,经常需要对Android ...
- [Android Studio] Android Studio快速定位当前打开的文件在哪个目录(package)下
转载自:http://blog.csdn.net/hyr83960944/article/details/38067499 在Eclipse中有一个很好的功能,就是比如我打开一个AActivity,左 ...
- [Android Studio] Android Studio快速定位当前打开的文件在哪个目录(package)下
转载自:http://blog.csdn.net/hyr83960944/article/details/38067499 在Eclipse中有一个很好的功能,就是比如我打开一个AActivity,左 ...
- Android ListView 之 SimpleAdapter 二 (包含 item 中按钮监听)
1 MainActivity.java package com.myadapter; import java.util.ArrayList; import java.util.HashMap; ...
- 快速定位 Android APP 当前页面的三种方法(Activity / Fragment)
方法一.通过adb命令打印当前页面: Android 如何快速定位当前页面是哪个Activity or Fragment (1)查看当前Activity :adb shell "dumpsy ...
- Android ListView A~Z快速索引(改进版)
上一篇文章虽然实现了ListView 快速索引的效果,但是有一个小小的Bug.这个Bug我在前面也说了,这篇文章就来解决这个Bug. 我研究的时候发现只要showBg值为true,中间的字母就显示,而 ...
随机推荐
- foreach中引用 的问题
在工作中遇到 关于 php foreach 引用的一个问题 简单来说,如下代码 $arr=array('a','b','c' ,'d'); foreach($arr as $k=>&$v ...
- UVa 1644 (筛素数 + 二分) Prime Gap
题意: 给出一个整数n,如果n是素数输出0,否则输出它后一个素数与前一个素数的差值. 分析: 首先用筛法把前十万个素数都筛出来,然后放到数组里.用二分找到不大于n的最大的素数的下标,如果这个素数等于n ...
- 更改nginx默认的网页目录
默认网站根目录为/usr/local/nginx/html,要将它改成/homw/www vi /usr/local/nginx/conf/nginx.conf 将其中的 loca ...
- oracle 问题若干 提醒注意
1.Powerdesigner 里生成sql,在oracle中运行时报错:ORA-00907: 缺失右括号 解决:这样的问题很多时候是因为用了不正确的数据类型造成的.比如写作nvarchar(n),但 ...
- C# 中的结构类型(struct)
原文 C# 中的结构类型(struct) 简介 有时候,类中只包含极少的数据,因为管理堆而造成的开销显得极不合算.这种情况下,更好的做法是使用结构(struct)类型.由于 struct 是值类型,是 ...
- 犯罪构成三层次记忆口诀 zt
犯罪构成三层次记忆口诀 2012-02-17 来源:为你辩护网 浏览次数:232 0 众所周知,犯罪构成“四要件”和犯罪构成“三层次”(“三阶层”)都是分析具体刑事案件的辅助性工具.犯罪构成四要件是指 ...
- HDU 1520-Anniversary party(树形dp入门)
题意: n个人参加party,已知每人的欢乐值,给出n个人的工作关系树,一个人和他的顶头上司不能同时参加,party达到的最大欢乐值. 分析:dp[i][f],以i为根的子树,f=0,i不参加,f=1 ...
- cocos2d-x 2.x版本中,场景切换各方法调用顺序
假设从A场景切换到B场景,调用各场景方法的顺序为: 如果没有切换效果(transition),则先调用B的init(),再调用A的onExitTransitionStart(),接着调用A的onExi ...
- 手把手教你写对拍程序(PASCAL)
谁适合看这篇文章? ACMERS,OIERS或其它参加算法竞赛或需要算法的人 对操作系统并不太熟悉的人 不会写对拍的人 在网上找不到一个特别详细的对拍样例的人 不嫌弃我写的太低幼的人 前言 在NOIP ...
- 对单片机的modbus RTU的详细解释(转载)
Modbus 一个工业上常用的通讯协议.一种通讯约定.Modbus协议包括RTU.ASCII.TCP.其中MODBUS-RTU最常用,比较简单,在单片机上很容易实现.虽然RTU比较简单,但是看协议资料 ...