野人学Android第二弹——AutoCompleteTextView自动搜索数据库
来源:互联网 发布:网络犯罪调查2分集剧情 编辑:程序博客网 时间:2024/06/05 10:36
AutoCompleteTextView的作用不言而喻,可以减少输入量,提高效率。比如说,你想在TextView中输入五个字,而用了AutoCompleteTextView这个控件后,只需要输入两个字就会弹出你想要的“五个字”,然后选中就OK了。推敲一下,这“五个字”是预先放在了一个数组中,所以可以根据输入的“两个字”进行匹配,出现刚才说的那种效果,就像百度搜索中的历史数据一样。那么,当历史数据的量很大的时候,如何实现呢?总不能还是放在数组中吧。那,这里就会涉及到数据库的使用。
在View和Data之间进行沟通,那么就需要Adapter登场了。在这里,大显身手的Adapter是CursorAdapter。来看下文档是怎么解释这个Adapter的吧。
蓝色的英文字大意为:
这个适配器是将Cursor中的数据赋值给一个控件,比如说Listview之类的。Cursor必须包含“_id”的数据集信息,否则这个class就不会工作。另外,如果合并的Cursors已经在它们的“_id”数据集中覆盖数据,那么使用了MergeCursor的class就不会起到作用。
从这个文字中,可以看出Cursor是一个必不可少的角色,那么Cursor作为一个指针,在sqlite的查询中会涉及到,也就是说这个Adapter会和数据库有直接的关系。我已经写了一个继承CursorAdapter的类,代码如下:
package com.example.sometest;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.provider.OpenableColumns;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.CursorAdapter;import android.widget.TextView;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.widget.SimpleCursorAdapter;class MyCursorAdpter extends CursorAdapter { private SQLiteDatabase sqlite; private String results; //引入sqlitepublic MyCursorAdpter(Context context, Cursor c, SQLiteDatabase sqlite) { super(context, c); this.sqlite = sqlite; } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { // Log.i("info", "newView"); final LayoutInflater inflater = LayoutInflater.from(context); final TextView view = (TextView) inflater.inflate( android.R.layout.simple_dropdown_item_1line, parent, false); return view; } @Override public void bindView(View view, Context context, Cursor cursor) { // Log.i("info", "bindView"); ((TextView) view).setText(cursor.getString(cursor.getColumnIndex("name"))); } /* * 在结果中选中某个值后,显示在TextView中的值 */ @Override public String convertToString(Cursor cursor) { // Log.i("info", cursor.getString(cursor.getColumnIndex("name"))); return cursor.getString(cursor.getColumnIndex("name")); } /* * 这个方法根据TextView输入的字符串,在数据库中进行匹配,从而获得cursor,这个cursor包含了数据信息 */ @Override public Cursor runQueryOnBackgroundThread(CharSequence constraint) { if (constraint != null) { // Log.i("info", "runQueryOnBackgroundThread"); String selection = "name like \'" + constraint.toString() +"%\'"; return sqlite.query("test", null, selection, null, null, null, null); } else { return null; } } }
来让我们看下这四个方法的执行逻辑吧。
与其说本博客讲的是AutoCompleteTextView自动搜索数据库,不如说是CursorAdapter的原理。请原谅我标题党了,剩下的实例化的工作我就不写了。
写在最后:
计划一个月的时间写完这些教程的,但是中间发生了许多事,现在才完成,实属无奈。最近准备转行IT,投了很多简历,无人问津。一时间也不知道如何进入IT界,而且现在快过年了,工作确实不好找。趁现在还有点时间,准备做几个项目练练手,也算是投简历的资本吧。加油~
- 野人学Android第二弹——AutoCompleteTextView自动搜索数据库
- 野人学Android第二弹——自定义ListView第二课
- 野人学Android第二弹——自定义ListView第一课
- 野人学Android第二弹——Handler与Thread之间的关系
- 野人学Android第二弹——主线程传递消息到次线程的摸索
- 野人学Android第二弹——自定义控件的分析与实例
- 野人学Android第二弹——利用Zxing实现二维码效果的步骤讲解
- 野人学Android第二弹——照片的拍摄与存储(一)
- 野人学Android第二弹——照片的拍摄与存储(二)
- 野人学Android第二弹——图片上传到服务器的基础原理
- 野人学Android第二弹——单张图片的上传
- 野人学Android第二弹——多张图片批量上传
- 野人学Android第二弹——多Activity之间的生命周期的规律摸索及多个Activity同时销毁的实现
- 野人传教士问题——盲目搜索
- 野人学Android第三弹——利用java的反射机制创建一个数据操作类
- 野人学Android基础篇之网络通讯第二课--本地apache服务器与Android的连接
- 一步一步学android控件(之五) —— AutoCompleteTextView
- 野人学Android基础篇之HelloWorld程序第二课--Manifest.xml的不完全解释
- Growth Hacking背后,数据分析平台的架构调整
- 机器人视觉技术学习笔记
- php环境搭建及设置出入站规则
- 数论及Python实践
- c语言学习笔记之结构体和枚举
- 野人学Android第二弹——AutoCompleteTextView自动搜索数据库
- VS2010+Opencv+SIFT
- 《python爬虫实战》:模拟登陆
- C语言总结
- leetcode笔记:Spiral Matrix
- [CUDA]CUDA C并行编程
- 慕课网 java jsp
- 本来已经拥有
- LeetCode Game of Life(位操作)