AutoCompleteTextView配合自定义的CursorAdapter(setAdapter()),可以帮助我们完成查找的功能.关键就在于类CursorAdapter.
CursorAdapter是继承自BaseAdapter并且实现了接口Filterable 。所以在我们自己定义的CursorAdapter子类中就不需要在继承Filterable,但对于JRE是1.5以下的虚拟机来说。是要重写方法getFilter()的;
要继承CursorAdapter类。必须实现的方法有:
1)首先执行的是public Cursor runQueryOnBackgroundThread(CharSequence constraint),constraint就是我们输入的要查询的关键字;此方法产生查询到的所有数据的cursor.并将其返回给下一个函数;
2)接下来执行方法public View newView(Context context, Cursor cursor, ViewGroup parent),cursor就是有第一种方法产生的.这个方法主要是产生一个个具体的承载cursor指向的数据的view类,最常见的是TextView;
3)接下来执行方法public void bindView(View view, Context context, Cursor cursor) 。view就是第2步产生的。cursor是第一步产生的。显而易见,就是将两者进行绑定。
但要注意的是,2和3是反复交替执行的。产生多少条数据(cursor.getcount())就执行多少轮。还有一点容易忽视的就是在xml文件中定义AutoCompleteTextView片段中一定要加入以下代码android:completionThreshold="1",他表示你最少要输入关键字的个数;
下面的代码以查询联系人为例:
package com.zymic.home;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Contacts;
import android.provider.Contacts.People;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AutoCompleteTextView;
import android.widget.CursorAdapter;
import android.widget.Filterable;
import android.widget.TextView;
import android.widget.Toast;
public class AutoTextViewEx extends Activity {
private AutoCompleteTextView autoTextView;
private Cursor cursor;
//
private static final String[] PEOPLE_PROJECTION = new String[] {
Contacts.People._ID,
Contacts.People.PRIMARY_PHONE_ID,
Contacts.People.TYPE,
Contacts.People.NUMBER,
Contacts.People.LABEL,
Contacts.People.NAME,
};
//
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//
autoTextView=(AutoCompleteTextView)findViewById(R.id.autotextview);
cursor=getApplicationContext().getContentResolver().query(People.CONTENT_URI, PEOPLE_PROJECTION, null, null, null);
MyAdapter adapter=new MyAdapter(this,cursor);
autoTextView.setAdapter(adapter);
}
//
public class MyAdapter extends CursorAdapter implements Filterable{
Cursor cursor;
public MyAdapter(Context context, Cursor c) {
super(context, c);
// TODO Auto-generated constructor stub
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
((TextView)view).setText(cursor.getString(5));
Toast.makeText(getApplicationContext(), "bindView", Toast.LENGTH_SHORT).show();
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService (
Context.LAYOUT_INFLATER_SERVICE);
TextView view=(TextView) inflater.inflate(android.R.layout.simple_dropdown_item_1line, null);
//view.setText(cursor.getString(5));
Toast.makeText(getApplicationContext(), "newView", Toast.LENGTH_SHORT).show();
return view;
}
@Override
public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
//UPPER(Contacts.People.NAME)
String where="UPPER("+Contacts.People.NAME+") GLOB ?";
String[]to=new String[]{"*"+constraint.toString().toUpperCase()+"*"};
cursor=getApplicationContext().getContentResolver().query(People.CONTENT_URI, PEOPLE_PROJECTION,
where, to, null);
//System.out.println(cursor);
Toast.makeText(getApplicationContext(), "runQuery", Toast.LENGTH_SHORT).show();
return cursor;
}
}
}
分享到:
相关推荐
AutoCompleteTextView大多是采用ArrayAdapter进行适配的,这种有时候并不能满足我们的需求,所以就有了这个demo
实现工具Android studio,一般AutoCompleteTextView提示语列表的适配器只能系统提供的ArrayAdapter等,这里自定义适配器继承了BaseAdapter。
扩展Android系统自带的AutoCompleteTextView控件,逐字提示,支持自定义类对象指定显示字段
Android自定义AutoCompleteTextView
autoCompleteTextView自定义BaseAdapter,实现下拉单的自定义样式,用sqlite数据库存放历史记录,进行写入时提示。点击某个下拉单写入autoCompleeTextView中。
TestCompleteText_AutoCompleteTextView和TextWatcher结合使用的小栗子, 常见的安卓TextView输入显示关键词下拉提示.
AutoCompleteTextView汉字和拼音关联,可以输入汉字和拼音查询
值得一提的是,AutoCompleteTextView和MultiAutoCompleteTextView这两种自动提示框有什么区别呢,可以由上图看得出来,后者可以将字符串分割开来之后仍然能够自动提示,这是前者做不到的。教程地址:...
AutoCompleteTextView和adapter的使用,里面用了arrayAdapter和simpleAdapter
用AutoCompleteTextView实现中文和拼音关联自动提示
只是一个很简单的例子,用autocompletetextview自动匹配姓名,在通讯录中查找,找到后点击会在下面的一个textview中显示出电话号码,适合初学者
Android AutoCompleteTextView控件学习 博客地址:http://blog.csdn.net/csdnyuandaimaxuexi/article/details/48439951
AutoCompleteTextView 显示更多
AutoCompleteTextView 使用BaseAdatpter 可以自定义界面和功能
本Demo展示了Android项目中AutoCompleteTextView以及MultiAutoCompleteTextView的简单使用,对其进行属性设置,以及数据填充。
android 百度地图 AutoCompleteTextView联想刷新实现检索 很全面的