野人学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界,而且现在快过年了,工作确实不好找。趁现在还有点时间,准备做几个项目练练手,也算是投简历的资本吧。加油~



0 0
原创粉丝点击