- 浏览: 5776614 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
ArrayAdapter实际上已经实现了过滤,排序等功能,只是ArrayAdapter太弱了,我们通常不去用它。
本人参考了ArrayAdapter源码写的一个adpater,可以有以下功能:
1,排序(最普通的String排序)
2,过滤(头匹配过滤,尾匹配过滤,任意位置匹配过滤)
3,指定返回需要的项数
3,可以指定其中不允许操作的Item
虽然该类功能也不算强(事实上也没办法强,很多东西都得自定义,无法涵盖所有情况),但总算实现了基本的功能,大家可以根据自己的实际情况在此基础上改。
ArrayAdapter源码:http://gundumw100.iteye.com/admin/blogs/1023902
本人参考了ArrayAdapter源码写的一个adpater,可以有以下功能:
1,排序(最普通的String排序)
2,过滤(头匹配过滤,尾匹配过滤,任意位置匹配过滤)
3,指定返回需要的项数
3,可以指定其中不允许操作的Item
虽然该类功能也不算强(事实上也没办法强,很多东西都得自定义,无法涵盖所有情况),但总算实现了基本的功能,大家可以根据自己的实际情况在此基础上改。
ArrayAdapter源码:http://gundumw100.iteye.com/admin/blogs/1023902
package com.ql.app; import java.text.Collator; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.Filter; import android.widget.Filterable; import android.widget.ListView; import android.widget.TextView; public class App extends Activity { List<String> dataList; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); dataList=Array2List(mStrings); // ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, dataList); //用法 ControllableSimpleAdapter adapter=new ControllableSimpleAdapter(this,dataList); adapter.getFilter().filter("!"); adapter.setMax(ControllableSimpleAdapter.ALL); adapter.setNeedSort(true); adapter.setFilterType(ControllableSimpleAdapter.FILTER_BODY); ListView listview=(ListView)findViewById(R.id.listview); listview.setAdapter(adapter); } /** * 数组转成List * @param <T> * @param tArray * @return */ public static <T extends Object> List<T> Array2List(T[] tArray) { List<T> tList = Arrays.asList(tArray); // List<T> tList = new ArrayList<T>(Arrays.asList(tArray)); return tList; } /** * 可控制的简单Adapter * @author admin * */ private class ControllableSimpleAdapter extends BaseAdapter implements Filterable{ public static final int ALL=-1; //全部需要 public static final int FILTER_HEAD=0;//从头开始过滤 public static final int FILTER_FOOT=1;//从后开始过滤 public static final int FILTER_BODY=2;//任意过滤 private Context context; private List<String> list; private boolean needSort=false;//是否需要排序 private ArrayFilter filter;//过滤器 private int max=ALL;//最多需要的项,默认全部需要 private int filterType = FILTER_HEAD;//过滤类别,默认从头开始过滤 public ControllableSimpleAdapter(Context context,List<String> list) { this.context = context; this.list=list; } //返回false后Item间的分割线消失 @Override public boolean areAllItemsEnabled() { return false; } //带有“-”的不可操作,通常和areAllItemsEnabled一起使用。 @Override public boolean isEnabled(int position) { return !list.get(position).startsWith("-");//此处根据需求灵活处理 } public int getCount() { return list.size(); } public Object getItem(int position) { return list.get(position); } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { TextView tv; if (convertView == null) { tv = (TextView) LayoutInflater.from(context).inflate( android.R.layout.simple_expandable_list_item_1, parent, false); } else { tv = (TextView) convertView; } tv.setText(list.get(position)); return tv; } public List<String> getList() { return list; } public void setList(List<String> list) { this.list = list; } public boolean isNeedSort() { return needSort; } public void setNeedSort(boolean needSort) { this.needSort = needSort; } private List<String> dosort(List<String> list) { Collections.sort(list, comparator); return list; } private Comparator<String> comparator = new Comparator<String>() { private final Collator collator = Collator.getInstance(); public int compare(String s1, String s2) { return collator.compare(s1, s2); } }; @Override public Filter getFilter() { // TODO Auto-generated method stub if (filter == null) { filter = new ArrayFilter(); } return filter; } public int getFilterType() { return filterType; } public void setFilterType(int filterType) { this.filterType = filterType; } public int getMax() { return max; } public void setMax(int max) { this.max = max; } private class ArrayFilter extends Filter { @Override protected FilterResults performFiltering(CharSequence prefix) { // TODO Auto-generated method stub FilterResults results = new FilterResults(); if (prefix == null || prefix.length() == 0) {//没有过滤符就不过滤 //new ArrayList<String>()表示让ListView一开始的时候什么都没有,而不是全部显示到ListView中 //new ArrayList<String>(list)表示一开始就让Item全部显示到ListView中 ArrayList<String> l = new ArrayList<String>(list); results.values = l; results.count = l.size(); } else { if(needSort&&!list.isEmpty()){//如果需要过滤的话,需要先排序,后过滤,可能会影响性能。 dosort(list); } String prefixString = prefix.toString().toLowerCase(); final ArrayList<String> values = new ArrayList<String>(list); final int count = values.size(); final ArrayList<String> newValues = new ArrayList<String>(count); for (int i = 0; i < count; i++) { final String value = values.get(i);//原始字符串 final String valueText = value.toString().toLowerCase(); // 匹配核心代码,需要自己实现,这里只提供了基本的过滤类型 switch (filterType) { case FILTER_HEAD: if (!valueText.startsWith(prefixString)) {//过滤掉不需要的项 newValues.add(value); } break; case FILTER_FOOT: if (!valueText.endsWith(prefixString)) {//过滤掉不需要的项 newValues.add(value); } break; case FILTER_BODY: if (valueText.indexOf(prefixString)==-1) {//过滤掉不需要的项 newValues.add(value); } break; default: break; } if(max>ALL){//不是全部 if(newValues.size()>max-1){//超过了就舍去 break; } } } results.values = newValues; results.count = newValues.size(); } return results; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { // TODO Auto-generated method stub list = (List<String>) results.values; if (results.count > 0) { notifyDataSetChanged(); } else { notifyDataSetInvalidated(); } } } } //test data private String[] mStrings = { "----------", "Doppelrhamstufel", "Dorset Blue Vinney", "----------", "Babybel", "----------", "Caerphilly", "----------", "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi", "Acorn", "Adelost", "Affidelice au Chablis", "!Afuega'l Pitu", "!Airag", "!Airedale", "!Aisy Cendre", "!Allgauer Emmentaler", "!Alverca", "Ambert", "American Cheese!", "Ami du Chambertin!", "Anejo Enchilado!", "Anneau du Vic-Bilh", "Anthoriro", }; }
- Test_ListView.rar (51.3 KB)
- 描述: 工程文件
- 下载次数: 365
- ListView搜索关键字高亮显示.zip (60.3 KB)
- 描述: 附送1
- 下载次数: 351
- android-world-of-listview-android.pdf (1 MB)
- 描述: 附送2,看看google怎么使用ListView的
- 下载次数: 319
评论
3 楼
sunshaoqun
2013-05-08
过滤后再做排序或许性能就提高了些吧。
2 楼
bdstudyhard
2012-12-18
1 楼
kikier
2012-07-26
文章的代码是过滤出不符合条件的?
发表评论
-
NestedScrollView滚动到顶部固定子View悬停挂靠粘在顶端
2018-10-31 20:45 6800网上有一个StickyScrollView,称之为粘性Scro ... -
自定义Behavior实现AppBarLayout越界弹性效果
2017-03-31 09:33 10225一、继承AppBarLayout.Beha ... -
Android - 一种相似图片搜索算法的实现
2017-03-31 09:33 2568算法 缩小尺寸。 将图片缩小到8x8的尺寸,总共64个 ... -
使用SpringAnimation实现带下拉弹簧动画的 ScrollView
2017-03-30 11:30 2790在刚推出的 Support Library 25.3.0 里面 ... -
Android为应用添加角标(Badge)
2017-03-30 11:21 61011.需求简介 角标是什么意思呢? 看下图即可明了: 可 ... -
Android端与笔记本利用局域网进行FTP通信
2017-03-23 10:17 923先看图 打开前: 打开后: Activity类 ... -
PorterDuffColorFilter 在项目中的基本使用
2017-03-03 10:58 1299有时候标题栏会浮在内容之上,而内容会有颜色的变化,这时候就要求 ... -
ColorAnimationView 实现了滑动Viewpager 时背景色动态变化的过渡效果
2017-02-24 09:41 2170用法在注释中: import android.anima ... -
迷你轻量级全方向完美滑动处理侧滑控件SlideLayout
2017-01-16 16:53 2548纯手工超级迷你轻量级全方向完美滑动处理侧滑控件(比官方 sup ... -
Effect
2017-01-05 09:57 0https://github.com/JetradarMobi ... -
动态主题库Colorful,容易地改变App的配色方案
2016-12-27 14:49 2516Colorful是一个动态主题库,允许您很容易地改变App的配 ... -
对视图的对角线切割DiagonalView
2016-12-27 14:23 1071提供对视图的对角线切割,具有很好的用户定制 基本用法 ... -
仿淘宝京东拖拽商品详情页上下滚动黏滞效果
2016-12-26 16:53 3418比较常用的效果,有现成的,如此甚好!:) import ... -
让任意view具有滑动效果的SlideUp
2016-12-26 09:26 1658基本的类,只有一个: import android.a ... -
AdvancedWebView
2016-12-21 09:44 16https://github.com/delight-im/A ... -
可设置圆角背景边框的按钮, 通过调节色彩明度自动计算按下(pressed)状态颜色
2016-11-02 22:13 1860可设置圆角背景边框的的按钮, 通过调节色彩明度自动计算按下(p ... -
网络请求库相关
2016-10-09 09:35 62https://github.com/amitshekhari ... -
ASimpleCache一个简单的缓存框架
2015-10-26 22:53 2121ASimpleCache 是一个为android制定的 轻量级 ... -
使用ViewDragHelper实现的DragLayout开门效果
2015-10-23 10:55 3332先看一下图,有个直观的了解,向下拖动handle就“开门了”: ... -
保证图片长宽比的同时拉伸图片ImageView
2015-10-16 15:40 3677按比例放大图片,不拉伸失真 import android. ...
相关推荐
ListView实现字母过滤排序及搜索功能
Android ListView字母排序过滤搜索,注释详细,可下载使用!
Android实现ListView的A-Z字母排序和过滤搜索功能,完整源码,小伙伴需要的来CSDN下载吧!项目详情http://blog.csdn.net/xiaanming/article/details/12684155
实现ListView的A-Z字母排序和过滤搜索功能,是一个功能完整的demo
支持listview按字母排序,效果图可以看我的微博。绝对实用。
ListView的字母排序和过滤搜索功能 效果图见博客地址:http://blog.csdn.net/u011183394/article/details/51965755
Android 实现ListView的A-Z字母排序和过滤搜索功能,AndroidStudio环境,可直接运行
Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音 demo
Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
ListView的A-Z字母排序功能以及根据输入框的输入值改变来过滤搜索结果,如果输入框里面的值为空,更新为原来的列表,否则为过滤数据列表,包括汉字转成拼音的功能
ListView的字母排序和过滤搜索功能 效果图见博客地址:http://blog.csdn.net/u011183394/article/details/51965755
ListView的字母排序和过滤搜索功能 效果图见博客地址:http://blog.csdn.net/u011183394/article/details/51965755
ListView的A-Z字母排序和过滤搜索功能并且实现汉字转成拼音的功能,城市列表等实现A-Z的排序,因为联系人和城市列表我们可以直接从数据库中获取他的汉字拼音,而对于一般的数据,我们怎么实现A-Z的排序,我们需要将...
项目详情参见博客:http://blog.csdn.net/xiaanming/article/details/12684155
从Android手机中得到通讯录联系人的数据,并且实现A-Z排序和搜索过滤
ListView的字母排序和过滤搜索功能 效果图见博客地址:http://blog.csdn.net/u011183394/article/details/51965755
一个简单的WPF应用程序,通过MVVM框架中的排序和过滤实现了主从设置。
基于Android实现ListView的A-Z字母排序和过滤搜索功能完整实例源码,可供学习及设计参考。
本项目是一个基于 ListView 的 A-Z 字母排序索引的例子源码,这个例子包括了一个过滤搜索功能,并且可以中文混搜,类似于微信的联系人搜索界