android api demos 之 ListView的搜索功能

原创 2012年03月30日 00:12:04






上面两个图片是设定画面,显示当前应用的画面,当输入一个“a”时,就会自动搜索出以“a”开头的正在运行的应用。这个功能的实现方法:

1.      使用SimpleAdapter

2.      设置setTextFilterEnabled(true)

setListAdapter(new SimpleAdapter(this, getData(path),

                android.R.layout.simple_list_item_1, new String[] { "title" },

                new int[] { android.R.id.text1 }));

getListView().setTextFilterEnabled(true);

其实SimpleAdapter实现了一个接口Filterable  ,只要我们自己写的Adapter也实现这个接口,我们的ListView也可以实现这个功能。

 

Filterable接口:

public interface Filterable{

    Filter getFilter();

}

Filter是一个抽象类,它定义以及实现了一个过滤规则。看SimpleAdapter中有Filter的实现。

private class SimpleFilter extends Filter {

 

        @Override

        protected FilterResults performFiltering(CharSequenceprefix) {

            FilterResults results = new FilterResults();

 

            if (mUnfilteredData == null) {

                mUnfilteredData = new ArrayList<Map<String, ?>>(mData);

            }

 

            if (prefix == null || prefix.length() == 0) {

                ArrayList<Map<String,?>> list = mUnfilteredData;

                results.values = list;

                results.count = list.size();

            } else {

                String prefixString =prefix.toString().toLowerCase();

 

                ArrayList<Map<String,?>> unfilteredValues = mUnfilteredData;

                int count = unfilteredValues.size();

 

                ArrayList<Map<String,?>> newValues = new ArrayList<Map<String, ?>>(count);

 

                for (int i = 0; i < count; i++) {

                    Map<String, ?> h =unfilteredValues.get(i);

                    if (h != null) {

                       

                        int len = mTo.length;

 

                        for (int j=0; j<len; j++){

                            String str =  (String)h.get(mFrom[j]);

                           

                            String[] words =str.split(" ");

                            int wordCount = words.length;

                           

                            for (int k = 0; k <wordCount; k++) {

                                String word =words[k];

                               

                                if(word.toLowerCase().startsWith(prefixString)) {

                                    newValues.add(h);

                                    break;

                                }

                            }

                        }

                    }

                }

 

                results.values = newValues;

                results.count =newValues.size();

            }

 

            return results;

        }

 

        @Override

        protected void publishResults(CharSequence constraint,FilterResults results) {

            //noinspection unchecked

            mData = (List<Map<String, ?>>)results.values;

            if (results.count > 0) {

                notifyDataSetChanged();

            } else {

                notifyDataSetInvalidated();

            }

        }

    }

Android ListView用EditText实现搜索功能

Android ListView用EditText实现搜索功能前言最近在开发一个IM项目的时候有一个需求就是,好友搜索功能。即在EditText中输入好友名字,ListView列表中动态展示刷选的好友...
  • bc_2014621
  • bc_2014621
  • 2016年04月26日 17:14
  • 1493

android edittext + listview 实现搜索listview中的内容

以前一直以为edittext中输入一些东西.然后可以检测listview中的内容很高大上.一直没有去尝试.现在项目中遇到了.特此过来尝试一番.结果发现挺简单的,效果还不错,主要就是用到了edittex...
  • u010399316
  • u010399316
  • 2015年06月30日 00:29
  • 1077

Android学习四之APIDemos

先前一直不知道到写一些什么,因为Android自带的APIDemos做得非常好,都是那些真正的高手们写的,而且文档也写的非常漂亮,我个人觉得很多东西都可以直接拿来用,在上边改,然后成为我们自己的东西,...
  • ZPH2254
  • ZPH2254
  • 2011年10月07日 13:54
  • 13158

android Api Demos

1.怎样导入APIDemos 参考自:http://www.cnblogs.com/xincdm/archive/2011/07/21/2113104.html 新建android工程,选择cre...
  • liu_zhen_wei
  • liu_zhen_wei
  • 2011年11月01日 10:44
  • 3074

Android开发SearchView+ListView实现搜索建议

Android开发中,搜索建议的实现
  • zcdreaming
  • zcdreaming
  • 2014年07月15日 07:19
  • 2504

Android ApiDemos示例解析:总结

Android ApiDemos示例解析(199):总结前面基本介绍完Android ApiDemos中除与OpenGL ES相关的所有示例,ApiDemo详细介绍了Android平台主要API,分成...
  • mapdigit
  • mapdigit
  • 2012年11月02日 11:01
  • 8956

android API Demos 路径

在android模拟器中有一个google官方给的 API Demos应用,这个应用里面有很多很有用的demo,我感觉把这些demo全部搞会,android开发的水平至少会上一个等级.那么这个应用的源...
  • qiang_xi
  • qiang_xi
  • 2015年09月08日 14:13
  • 5258

Android搜索框之PopupWindow+ListView实现

PopupWindow+ListView实现Android搜索框 1:布局文件(EditText+ImageView) 2:   自定义ListView适配器 SearchAdapter...
  • const_qiu
  • const_qiu
  • 2016年05月18日 20:26
  • 743

Android自定义搜索框(EditText)的搜索功能实现,过滤ListView

实现自定义搜索框(实际上就是一个EditText):
  • qq_15096707
  • qq_15096707
  • 2015年07月04日 00:07
  • 2206

安卓开发入门篇(一):Android Studio导入ApiDemos

引言本人程序员,之前做网站比较多,nodejs/express+html/css+mysql,再之前也做过Java开发,编程上还是有丰富的经验。在持续的实战中,发现想做产品的话,前端似乎更重要,因为前...
  • dreamer2020
  • dreamer2020
  • 2016年08月25日 23:15
  • 10981
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android api demos 之 ListView的搜索功能
举报原因:
原因补充:

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