一、何谓Android的过滤机制?
六、实战
知道了Android的过滤机制,我们就以AutoCompleteTextView为例,通过输入文本筛选数据库中的数据。
1、首先写ContentProvider
由于代码量比较多,只写出对外的接口。
- public static final class Location implements BaseColumns {
- public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "location" );
- public static final String CONTENT_TYPE = "vnd.android.cursor.dir/weather_location" ;
- public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/weather_location" ;
- public static final String CONTENT_DIRECTORY = "location" ;
- public static final String LOCATION_NAME = "location_name" ;
- public static final String LONGITUDE = "longitude" ;
- public static final String ALTITUDE = "altitude" ;
- }
2、写CursorAdapter
- private static class LocationAdapter extends CursorAdapter {
- private LayoutInflater mInflater;
- private Context mContext;
- private Cursor mCursor;
- public LocationAdapter(Context context, Cursor c) {
- super (context, c);
- mContext = context;
- mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- }
- @Override
- public void bindView(View view, Context context, Cursor cursor) {
- TextView textView = (TextView) view;
- String location = cursor.getString(cursor.getColumnIndex(Location.LOCATION_NAME));
- textView.setText(location);
- }
- @Override
- public View newView(Context context, Cursor cursor, ViewGroup parent) {
- return mInflater.inflate(android.R.layout.simple_dropdown_item_1line, null );
- }
- @Override
- public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
- String selection = Location.LOCATION_NAME + " LIKE '%" + constraint + "%'" ;
- return mContext.getContentResolver().query(Location.CONTENT_URI
- , null , selection, null , null );
- }
- /**一定要重写该方法,否则AutoCompleteTextView选中某一项后,文本框显示的不是所要的文本*/
- @Override
- public CharSequence convertToString(Cursor cursor) {
- return cursor.getString(cursor.getColumnIndex(Location.LOCATION_NAME));
- }
- }
- private void initialTextView() {
- mTextView = new AutoCompleteTextView(mContext);
- mTextView.setThreshold(0 );
- Cursor cursor = mContext.getContentResolver().query(Location.CONTENT_URI
- , null , null , null , null );
- LocationAdapter adapter = new LocationAdapter(mContext, cursor);
- mTextView.setAdapter(adapter);
- }
对于短信搜索,是直接使用了Android系统的搜索框架,当然在我们平常做项目的时候,也可以直接调用系统自带的搜索框,这个具体的怎么调用可以用Google或者百度搜索,有许多相关的资料,现在主要记录下自己阅读短息搜索源码的流程以及遇到的问题。
1. 在ConversationList.java文件中有如下一段代码:
- public boolean onSearchRequested() { startSearch( null , false , null /*appData*/ , false ); return true ;}
在这里是重写了Activity里的onSearchRequested()方法,如果我们不想在这里面做一些操作的话,可以直接调用onSearchRequested()方法。在onSearchRequested()方法里是调用了startSearch()方法。
2. 一直追踪下去可以追溯到SearchaDialog.java中。这里在搜索框中添加了一个Adapter,这个Adapter就是来显示下拉列表的,在 这个类中发现在runQueryOnBackgroundThread()方法中还是回到了SearchManager的getSuggestions方 法中,根据相应的Uri, mContext.getContentResolver().query(uri, null, selection, selArgs, null);去查询相关的数据库。
3. 在短信搜索这里与之相关的Uri为SuggestionsProvider,最后还是到了MmsSmsProvider中去进行数据库查询操作。
4.在MmsSmsProvider中有条查询语句:String.format("SELECT _id, index_text, source_id, table_to_use, offsets(words) FROM words WHERE words MATCH '%s*' LIMIT 50;", searchString); 这里将通过这条SQL语句进行查询,将结果以Cursor的形式进行返回。
4. 在SuggestionsProvider,这边对cursor的内容进行提取,显示在下拉列表中。但是这里可能是Google留给广大厂商去解决,就是 SQLite中的 MATCH 并不能很好的匹配亚洲文字,如:汉字,韩语等。所以按照源码的话,这个短信搜索功能搜索英文还可以,但是搜索亚洲文字,则无法搜索出来。不知道以后 SQLite 会不会对 MATCH 增加对非字母文字的支持。
关于offsets(),的一些说明:
offsets(),返回一系列以空格隔开的整数,至少含有4为数(以4个整数为一组返回)。
对于这四位数的解释:
第0位:表示列号
第1位:表示在该列中该字符出现的次数
第2位:在该列中匹配项字符的偏移位 (bytes)
第3位:匹配项的大小(bytes)
offsets()需要和MATCH配对使用。
关于MATCH()
MATCH : 如 MATCH 'Hi', 表示存在Hi的字符串,MATCH ‘Hi*’, 表示以Hi开头的字符串。
发表评论
-
ScrollView嵌套Edittext
2015-04-08 18:26 843scrollview 中加入多个控件如 edittext 后会 ... -
android 布局式跑马灯,非TextView
2015-04-07 10:51 494如题,简单的实现了跑马灯效果,把Scroll.java放入an ... -
Android圆角图片
2015-03-11 17:44 694my_wane_shape.xml 快速圆角背景边框实现, ... -
SQLite多线程读写实践及常见问题总结
2015-02-13 17:06 944基本操作的部分,大家都很熟悉了,这里根据个人切身经验,总结了一 ... -
android加速度感应
2015-01-19 10:25 14731.android测量数据 (1)android设备坐标系 ... -
MatrixCursor的使用
2015-01-19 09:49 1045ContentProvider对外共享数据的时候的query( ... -
Android 获取控件的宽高高级用法(MeasureSpec)
2015-01-15 14:23 998一个MeasureSpec封装了父 ... -
Android_GridView_GridView概述及实现水平滑动
2015-01-14 17:14 11511.GridView简介 GridView是ViewGroup ... -
Android MMS,SMS之常用Uri
2014-09-19 16:32 1323Android MMS,SMS之常用Uri Android ... -
android短彩信查询以及MMS表结构
2014-09-19 16:31 2236android短信的数据库的Uri是不公开的, 读取起来时灰常 ... -
使用Android自带DownloadManager下载文件
2014-08-19 11:04 767SDK在API Level 9中加入了DownloadMan ... -
android textview里链接点击事件,增加图片
2014-08-07 16:45 1146Android系统默认给TextView插入图片提供了三种方 ... -
android Home事件汇总
2014-07-18 11:30 1005方法一:android 4.0以后无法通过更改页面的类型来 ... -
Android风格与主题(style and theme)
2014-07-16 16:35 672Android xml风格和主题文 ... -
Android中播放声音的两种方法
2014-05-30 15:09 668在Android中,音频、视 ... -
android 杀进程方法
2014-05-26 17:43 1008关闭应用的方法: 1.System.exit(0); ... -
android service 生命周期
2014-04-21 16:16 787有了 Service 类我们如何启动他呢,有两种方法: ... -
解决ADB端口被占用的问题
2014-04-21 16:14 833究其源就是adb server没启动 经过分析整理如下: ... -
输入法隐藏打开
2013-12-23 14:24 817首次进入activity,如果有个edittex ... -
google经纬度互转
2013-07-11 16:34 935https://developers.google.com/ ...
相关推荐
在Android开发中,`Filter`是一个非常重要的概念,它主要用于数据的筛选和过滤,尤其是在处理大量数据时,如ListView、RecyclerView等组件的数据展示。本文将深入探讨`Android Filter`的原理及其在过滤ListView变色...
在Android应用开发中,Intent Filter是一个至关重要的概念,它用于定义一个组件(如Activity或BroadcastReceiver)能够响应的Intent类型。Intent Filter就像一个过滤器,筛选出应用可以处理的特定操作,使得系统能够...
Android app for neutral density filter calculation. The play store version is uploaded at https://play.google.com/store/apps/details?id=org.kaziprst.android.ndfilter. Please donate translations for ...
本项目"android-image-filter-ndk"是一个开源示例,它展示了如何利用NDK在C语言中处理Android位图,实现图像过滤器功能。 一、Android NDK基础 1. NDK的作用:NDK为Android应用提供了本地编程环境,使得开发者可以...
为了解决这个问题,可以使用滤波算法,如卡尔曼滤波(Kalman Filter)、均值滤波、中位数滤波等。例如,卡尔曼滤波是一种有效的在线滤波算法,适用于处理带有随机噪声的数据,可以平滑GPS数据,减少跳跃性误差。 三...
1. `BlurMaskFilter`: 这是一个自定义的Android Filter,用于对视图进行模糊处理。它使用了OpenGL ES来加速处理过程,提高性能。 2. `BlurringView`: 这是一个自定义视图类,可以将任何子视图的内容模糊化。它提供...
《NXP QCA6174 Android 蓝牙驱动wcnss_filter源码解析》 在Android系统中,蓝牙功能扮演着至关重要的角色,它使得设备之间能够进行无线通信,实现音频播放、数据传输等功能。NXP QCA6174是一款高性能的Wi-Fi和蓝牙...
android-instagram-filter, 像 Instagram 这样的android图像过滤器 用于Android的 Instagram 过滤器面向Android的 GPUImage概念来自: iOS GPUImage框架。目标是尽可能地拥有类似于GPUImage的东西。 顶点和 fragment...
android-image-filter some android image filters in some filter, I use NDK to implement to make it more efficient Setup Install Android NDK and properly configure it: http://goo.gl/koTCb Get a clean ...
这个开源项目“android-instagram-image-filter”提供了一种实现这一功能的方式,它的目标是复制Instagram应用中的滤镜效果,使开发者可以为自己的应用程序添加类似的图像处理功能。 首先,我们来探讨一下滤镜的...
在Android开发中,"筛选对话框活动"是常见的用户交互...以上就是与"filter-dialog-activity"这个开源项目相关的Android开发知识点,通过学习和应用这些知识,开发者可以提升其在创建高效、易用筛选对话框方面的技能。
开发者需要在AndroidManifest.xml中配置相应的intent-filter,以实现应用间的深度链接。 4. Android Studio支持:Android Studio 1.5及以上版本提供了对Android 23的全面支持,包括Gradle插件更新,使得构建过程...
本篇将详细介绍如何在Android应用中实现列表搜索,主要涉及`filter`概念以及实际的代码实现。 一、Filter原理 `Filter`是Java和Android中的一个接口,用于数据过滤。在Android中,`Filter`通常与`Adapter`一起使用...
在Android中,intent-filter定义了组件可以响应的Intent。Intent可以认为是一种消息传递方式,它告诉Android系统某个组件(如Activity)能够执行哪些操作。一个Activity通过在AndroidManifest.xml文件中配置intent-...
在Android开发中,EditText是用户输入数据的常见组件,它允许用户输入文本并显示在界面上。然而,有时候我们希望对用户的输入进行限制,比如只允许输入数字、字母或者特定格式的数据,这时我们就需要用到EditText的...
在Android应用开发中,Intent是连接应用程序组件之间通信的关键机制。Intent-filter的配置对于正确地启动和接收...在Android系统中,Intent-filter是组件间通信的关键组成部分,它决定了哪些组件能响应用户的特定操作。
<category android:name="com.android.settings.SHORTCUT" />+ </intent-filter> <meta-data android:name="com.android.settings.FRAGMENT_CLASS" android:value=...
CameraFilter Realtime camera filters. Process frames by OpenGL shaders. Download the apk to have a try. Filters Thanks to the original authors of the shader codes. I had only portted them from webgl ...
`logback-android`支持插件机制,允许开发者编写自定义的Appender、Filter和Layout。这为日志系统提供了极高的灵活性,可以根据项目需求定制各种高级功能。 综上所述,`logback-android`作为Android开发中的日志...