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,中间的字母就显示,而 ...
随机推荐
- javascript 库
http://overapi.com/javascript/ 查javascript http://slimerjs.org/ 自动测试? http://www.cnblogs.com/lhb25/p ...
- ASP.NE的缓存技术提高Web站点的性能
一:我们为什么要使用缓存? 先来理解一下asp.net缓存技术的基本原理:把访问频繁的数据以及需要花大量的时间来加载的数据缓存在内存中,那么用户在下次请求同样的数据时,直接将内存中的数据返回给用户,从 ...
- vijos 1563 疯狂的方格取数
P1653疯狂的方格取数 Accepted 标签:天才的talent[显示标签] 背景 Due to the talent of talent123,当talent123做完NOIP考了两次的二取 ...
- SDOI2008仪仗队
这题应该注意到与b2818的不同 一个点能被看见当且仅当它与(1,1)的横纵坐标的距离gcd为1 所以问题转化为x,y<=n-1,求gcd(x,y)=1的方案数 最后要加上2 代码: var i ...
- 【highcharts】
zoomType positioner
- 【众秒之门 JavaScript与jQuery技术精粹 #BOOK#】第1章 初学JavaScript需知的七件事
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- Spring 教程(一)
一.Spring是什么 通常说的Spring其实指的是Spring Framework,它是Spring下的一个子项目,Spring围绕Spring Framework这个核心项目开发了大量其他项目, ...
- WebDriver打开浏览器-java
环境:配置jdk.使用Eclipse(个人爱好),导入selenium-java-2.42.2.jar.selenium-java-2.42.2-srcs.jar.selenium-server-st ...
- 树-伸展树(Splay Tree)
伸展树概念 伸展树(Splay Tree)是一种二叉排序树,它能在O(log n)内完成插入.查找和删除操作.它由Daniel Sleator和Robert Tarjan创造. (01) 伸展树属于二 ...
- 【转载】shell中的特殊变量$
shell中的特殊变量:变量名含义$0shell或shell脚本的名字$*以一对双引号给出参数列表$@将各个参数分别加双引号返回$#参数的个数$_代表上一个命令的最后一个参数$$代表所在命令的PID$ ...