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,中间的字母就显示,而 ...
随机推荐
- 各种html5 的 polyfill
https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills 配合 Modernizr
- JPA简单知识
,JPA(Java Persistence API):通过注解或XML描述对象--关系表的映射关系,并将运行期的实体对象持久化到数据库中. JPA是一套规范,不是某个ORM产品,它主要包括以下3方面的 ...
- ASP.NET MVC:通过 FileResult 向 浏览器 发送文件
在 Controller 中我们可以使用 FileResult 向客户端发送文件. FileResult FileResult 是一个抽象类,继承自 ActionResult.在 System.Web ...
- [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.5.8
Prove that for any matrices $A,B$ we have $$\bex |\per (AB)|^2\leq \per (AA^*)\cdot \per (B^*B). \ee ...
- 单点登录技术:微软Passport单点登录协议和自由联盟规范
随着互联网络应用的普及,越来越多的人开始使用互联网上提供的服务.然而目前提供服务的网站大多采用用户名.口令的方式来识别用户身份,这使得用户需要经常性的输入自己的用户名.口令.显然这种认证方式存在着弊端 ...
- (转)Make命令简介与使用
转载自阮一峰的博客: http://www.ruanyifeng.com/blog/2015/02/make.html 代码变成可执行文件,叫做编译(compile):先编译这个,还是先编译那个(即编 ...
- html2canvas 网页截图 下载 上传
利用html2canvas插件 对网页截图 并下载和上传图片. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//E ...
- Codeforces Round #359 (Div. 1)
A http://codeforces.com/contest/685/standings 题意:给你n和m,找出(a,b)的对数,其中a满足要求:0<=a<n,a的7进制的位数和n-1的 ...
- Petshop学习第三天
ASP.NET缓存 ASP.NET充分利用缓存机制,通过某种方法,将系统需要的数据对象.Web页面存储在内存中,使得Web站点需要这些数据时,不经过繁琐的数据库连接.查询和复杂的逻辑运算,就可以触手可 ...
- 纯CSS完美实现垂直水平居中的6种方式
前言 由于HTML语言的定位问题,在网页中实现居中也不是如word中那么简单,尤其在内容样式多变,内容宽高不定的情况下,要实现合理的居中也是颇考验工程师经验的.网上讲居中的文章很多,但是都不太完整,所 ...