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 Api Demos登顶之路(104)View-->Custom

/*这个demo演示了如何使用自定义的View。在本例中自定义了一个LableView,并且自定义了 * text、textColor、textSize三个自定义的属性*/ public class...

Android——API Demos内容

1. App 1.1 Activity 1.1.1 Animaton 1.1.2 Custom Dialog 1.1.3 Custom ...

Android Api Demos登顶之路(十九)Rotation Animation

这个Demo演示了手机屏幕旋转时的动画效果,基本思路就是通过设置Window的属性,实现屏幕旋转时的动画效果, 但要求必须是Api18以上。 在这个小Demo上还出了一点小状况,程序运行时一直看不...

Android samples API Demos之UI篇3(AdvancedImmersiveMode)沉浸模式

Android AdvancedImmersiveMode Sample Immersive Mode, added in Android 4.4, improves the "hide fu...

Android Api Demos登顶之路(七十五)Graphics-->GradientDrawable

这个demon主要演示了drawable中shape的用法。 主要在布局文件中引用在drawable中定义的shape shape1.xml ...

Android Api Demos登顶之路(六)

本例验证的是finishiAffinity()方法,正如demo中介绍的那样No matter how deep you go,Activity.finishAffinity() will get y...

Android Api Demos登顶之路(八十八)Graphics-->ScaleToFit

/* * Matrix的setRectToRect(RectF src, RectF dst, Matrix.ScaleToFit stf)方法实现了从源图形向目标区域图形的变换。 * Matri...

Android Api Demos登顶之路(二十九)Share Action Provider

这个demo演示了ShareActionProvider的用法。Android也提供好了几个内置的Action Provider, ShareActionProvider就是其中一个。 menu目录...

Android Api Demos登顶之路(二十二)SetWallpaper

这个demo演示了如何为手机设置壁纸,对于壁纸的管理使用WallpaperManager类。 本例实现的思路是:取出当前壁纸,并显示在imageView当中,使用PorterDuff.Mode.MU...

Android Api Demos登顶之路(三十七)Fragment-->Dialog

这个demo演示了利用DialogFragment来展示和管理各种风格的样式的对话框。 activity_main.xml...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android api demos 之 ListView的搜索功能
举报原因:
原因补充:

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