Android学习笔记_79_ Android 使用 搜索框

1、在资源文件夹下创建xml文件夹,并创建一个searchable.xml:


<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/sms_search"
android:hint="@string/sms_search"
android:searchSuggestAuthority="cn.itcast.smsmanager.MySuggestionProvider"
android:searchSuggestSelection=" ?" >
</searchable>

2、配置文件


<activity
android:name=".SearchableActivity"
android:theme="@android:style/Theme.NoTitleBar" >
<!--下面这两个节点必须要有 -->
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>

<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
<!-- 指定我们要激活的是哪个SearchableActivity -->
<meta-data
android:name="android.app.default_searchable"
android:value=".SearchableActivity" />

3、创建provider


public class MySuggestionProvider extends SearchRecentSuggestionsProvider {

public final static String AUTHORITY = "cn.itcast.smsmanager.MySuggestionProvider";
public final static int MODE = DATABASE_MODE_QUERIES;

private final static String[] sms_projection = new String[]{Sms._ID,Sms.ADDRESS,Sms.BODY};

private final static String[] columnNames = new String[]{BaseColumns._ID,
SearchManager.SUGGEST_COLUMN_TEXT_1,
SearchManager.SUGGEST_COLUMN_TEXT_2,
SearchManager.SUGGEST_COLUMN_QUERY};

public MySuggestionProvider() {
setupSuggestions(AUTHORITY, MODE);
}

@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
Log.i("i", "query ...");

if(selectionArgs != null){
String query = selectionArgs[0];

if(TextUtils.isEmpty(query)){
return null;
}

Uri uri1 = Sms.CONTENT_URI;
String where = Sms.BODY + " like ‘%" + query + "%‘";
Cursor cursor = getContext().getContentResolver().query(uri1, sms_projection, where, null, Sms.DATE + " desc ");
return changeCursor(cursor);
}
return null;
}

private Cursor changeCursor(Cursor cursor){
MatrixCursor result = new MatrixCursor(columnNames);
if(cursor != null){
while(cursor.moveToNext()){
Object[] columnValues = new Object[]{cursor.getString(cursor.getColumnIndex(Sms._ID)),
cursor.getString(cursor.getColumnIndex(Sms.ADDRESS)),
cursor.getString(cursor.getColumnIndex(Sms.BODY)),
cursor.getString(cursor.getColumnIndex(Sms.BODY))};
result.addRow(columnValues);
}
}
return result;
}
}

4、存放搜索结果的activity:


public class SearchableActivity extends ListActivity {

private ListView mListView;

private QueryHandler mQueryHandler;

private SearchAdapter mAdapter;

protected void onCreate(android.os.Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();

mListView = getListView();

mAdapter = new SearchAdapter(this, null);

mListView.setAdapter(mAdapter);

mListView.setBackgroundColor(Color.WHITE);

if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
doSearch(query);

}

mListView.setOnItemClickListener(new MyOnItemClickListener());
}
}

http://www.cnblogs.com/zhengbeibei/archive/2013/01/17/2865610.html

Android学习笔记_79_ Android 使用 搜索框

时间: 2024-10-29 19:05:59

Android学习笔记_79_ Android 使用 搜索框的相关文章

Android学习笔记_78_ Android开发中使用软引用和弱引用防止内存溢出

在<Effective Java 2nd Edition>中,第6条"消除过期的对象引用"提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池.缓存中的过期对象都有可能引发内存泄露的问题.书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一问题.之前也确实遇到过类似问题,但是没有接触过"弱引用"相关的问题,于是查阅了一些资料. <Java 理论与实践: 用弱引用堵住内存泄漏>

九、Android学习笔记_ Android开发中使用软引用和弱引用防止内存溢出

在<Effective Java 2nd Edition>中,第6条"消除过期的对象引用"提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池.缓存中的过期对象都有可能引发内存泄露的问题.书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一问题.之前也确实遇到过类似问题,但是没有接触过"弱引用"相关的问题,于是查阅了一些资料. <Java 理论与实践: 用弱引用堵住内存泄漏>

Android学习笔记一 Android的构成

一个Android程序是由多个Activity松散构成通过Intnet对象相互调用每个Activity相对独立. R文件:自动生成,存储着程序集所包含的资源文件. src:包含程序中所有的Activity类文件. 新添加的Activity必须在AndroidManifest.xml中进行注册. values:该文件夹下的元素会在R文件中生成资源ID. Android学习笔记一 Android的构成

Android 学习笔记 2 Android开发环境的安装(Eclipse Bundle)

搭建eclipse开发环境,一般要经过 安装JDK.安装Eclipse.下载Android SDK.在Eclipse中安装ADT.在Eclipse中配置Android SDK.通过SDK Manager对Android SDK进行管理等几个比较麻烦的步骤. 后来Google推出了 adt-bundle 将ATD.SDK整合到Eclipse中,这样对于新手来说就免去了很多步骤,入门更容易了. 在此推荐一个网站 http://tools.android-studio.org/ 可以免去搬梯子去And

Android学习笔记十七.Android数据存储与IO.File存储常用API

Android通过一套完整的I/O流体系,包括FileInputStream.FileOutputStream等,通过这些I/O流来访问手机存储上的文件. 一.API 1.File (1)功能:该类提供一些有限的功能-获取或设置文件的权限.文件类型.最后依次修改时间等,通常它所代表的文件名(包含路径)将被转换为UTF-8字节序列被使用. (2)继承关系 java.lang.Object ? java.io.File (3)构造方法  File(File dir, String name):构造一

(android学习笔记)Android View

Android View类: 1.所有的Android组件均是View的子类. 2.所有的组件均可以进行两种配置,一是通过方法进行配置.二是通过XML进行配置. TextView类: 1.对于文本组件而言主要的目的是静态的显示一些文字,类似于标签的功能. 2.其是android.widget.TextView类,是android.view.View类的直接子类. 3.插入超链接的方法: 1)在XML文件中的TextView组件配置中写:android:autoLink="all" 会自

android学习笔记(9)android程序调试学习

相应若水老师的第十四课 一,Log日志输出 Log.v(tag,message);        //verbose模式,打印最具体的日志 Log.d(tag,message);        //debug级别的日志 Log.i(tag,message);        //info级别的日志 Log.w(tag,message);        //warn级别的日志 Log.e(tag,message);        //error级别的日志 tag用来标记log消息的源头用常量来表示.

android学习笔记(7)android程序调试学习

对应若水老师的第十四课 一,Log日志输出 Log.v(tag,message);        //verbose模式,打印最详细的日志 Log.d(tag,message);        //debug级别的日志 Log.i(tag,message);        //info级别的日志 Log.w(tag,message);        //warn级别的日志 Log.e(tag,message);        //error级别的日志 tag用来标记log消息的源头用常量来表示.

Android学习笔记之 android:collapseColumns ,android:shrinkColumns 和stretchColumns

摘自:http://blog.csdn.net/sjf0115/article/details/7213565/ TableLayout是一个使用复杂的布局,最简单的用法就仅仅是拖拉控件做出个界面,但实际上,会经常在代码里使用TableLayout,例如做出表格的效果.本文主要介绍TableLayout的基本使用方法. [java] view plain copy <?xml version="1.0" encoding="utf-8"?> <Ta