1、首先定义MVC中的Model,自定义DBHelper类继承SQLiteOpenHelper用于访问数据库
2、定义AutoCompleteAdater继承SimpleCursorAdapter控制数据交互复制代码
- import android.content.Context;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteOpenHelper;
- public class DBHelper extends SQLiteOpenHelper {
- private static final int DATABASE_VERSION = 1;
- private static final String DATABASE_NAME = "autoComplete.db";
- // 根据name自动查询
- public static final String NAME = "name";
- public DBHelper(Context context) {
- super(context, DATABASE_NAME, null, DATABASE_VERSION);
- }
- @Override
- public void onCreate(SQLiteDatabase db) {
- String sqlString = "createtable test (_id integer primary key autoincrement,name varchat(20) not null onconflict fail)";
- db.execSQL(sqlString);
- // 初始数据库表
- String[] nameStrArrayStr = new String[] { "aaa", "abc", "cde", "中国", "美女", "提示" };
- for (int i = 0; i < nameStrArrayStr.length; i++) {
- db.execSQL("INSERT INTOtest(" + NAME + ")values(?)",new Object[] { nameStrArrayStr[i] });
- }
- }
- @Override
- public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
- // do nothing here
- }
- public Cursor query(String name) {
- SQLiteDatabase db = this.getReadableDatabase();
- return db.rawQuery("select* from test where name like '%" + name + "%' limit 10",null);
- }
- }
3、最后定义View复制代码
- import android.content.Context;
- import android.database.Cursor;
- import android.widget.SimpleCursorAdapter;
- public class AutoCompleteAdater extends SimpleCursorAdapter {
- private DBHelper dbHelper = null;
- private Context context;
- // 查询字段
- private String queryField;
- public AutoCompleteAdater(Context context, int layout, Cursor c,String from, int to) {
- super(context, layout, c, new String[] { from },new int[] { to });
- this.context = context;
- this.queryField = from;
- }
- @Override
- public Cursor runQueryOnBackgroundThre
ad(CharSequenceconstraint) {
- if (constraint != null) {
- return getDbHelper().query((String) constraint);
- } else {
- return null
- }
- }
- @Override
- public CharSequence convertToString(Cursor cursor) {
- return cursor.getString(cursor.getColumnIndex(queryField));
- }
- public DBHelper getDbHelper() {
- if (dbHelper == null) {
- dbHelper = new DBHelper(this.context);
- }
- return dbHelper;
- }
- }
- android:id="@+id/autoCompleteTextView1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text=""
- android:hint="@string/dbAutoComlete" >
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- AutoCompleteAdatercursor
Adapter = new AutoCompleteAdater(this, android.R.layout.simple_dropdown_item_1line,null, DBHelper.NAME, android.R.id.text1);
- // 设置输入一个字符就弹出提示列表(默认输入两个字符时才弹出提示)
- ((AutoCompleteTextView) this.findViewById(R.id.autoCompleteTextView1)).setThreshold(1);
- ((AutoCompleteTextView) this.findViewById(R.id.autoCompleteTextView1)).setAdapter(cursorAdapter);
- }
![0_1329446967yx6A.gif 0_1329446967yx6A.gif](http://www.eoeandroid.com/data/attachment/forum/201209/25/111507heeqt74yqq3siygs.gif)
下载地址:http://download.csdn.net/detail/goleftgoright/4069418[/url]
android AutoCompleteTextView 实现输入提示,类似百度支持输入拼音提示中文
android 的 AutoCompleteTextView 控件实现了输入框的输入提示功能,这个功能更加使用于国外的手机用户来使用。而很多时候国人更多的是要象百度那样我输入的是拼音也能将中文提示出来,如: 输入xinlang 就能提示:新浪、新浪微博等。又或者是输入:xl 拼音首字母也能做到。这样的提示才是更加的符合国人的习惯。先上图,看效果:
先简单的介绍下AutoCompleteTextView 控件的基本用法:这个在android的sdk里也是有介绍的,下面是sdk中介绍的实现代码:
public class CountriesActivity extends Activity { protected void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.countries); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, COUNTRIES); AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.countries_list); textView.setAdapter(adapter); } private static final String[] COUNTRIES = new String[] { "Belgium", "France", "Italy", "Germany", "Spain" }; }从上面的代码可到实现这个功能是很简单的,只要将一个要提示的数组绑定到ArrayAdapter中,再将ArrayAdapter和 AutoCompleteTextView 控件绑定一起。
下面来说下我的功能的实现方式:
public class AutoTestActivity extends Activity {
/** Called when the activity is first created. */
ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
addItems();
AutoCompleteTextView ac = (AutoCompleteTextView)findViewById(R.id.autocomplete);
SimpleAdapter notes = new SimpleAdapter(
this,
list,
R.layout.main_item_three_line_row,
new String[] { "brandSearchText", "brandName"},
new int[] { R.id.searchText, R.id.brandName } );
ac.setAdapter(notes);
ac.setThreshold(1);
ac.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
TextView tv = (TextView)arg1.findViewById(R.id.brandName);
ac.setText(tv.getText().toString()+" ");
ac.setSelection((ac.getText().toString()).length());
}
});
}
private void addItems() {
HashMap<String,String> item;
item = new HashMap<String,String>();
item.put( "brandSearchText", "NOKIA nuojiya NJY");
item.put( "brandName", "诺基亚");
list.add( item );
item = new HashMap<String,String>();
item.put( "brandSearchText", "SVMSUN SX sanxing");
item.put( "brandName", "三星");
list.add( item );
item = new HashMap<String,String>();
item.put( "brandSearchText", "摩托罗拉 moto MTLL motuoluola motoloar");
item.put( "brandName", "摩托罗拉");
list.add( item );
}
}
1.我这里将不使用ArrayAdapter而是用SimpleAdapter。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:id="@+id/brandName" />
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:id="@+id/searchText"
android:visibility="gone" />
</LinearLayout>
ac.setOnItemClickListener(new OnItemClickListener(){
到了这里就基本完成了。@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
TextView tv = (TextView)arg1.findViewById(R.id.brandName);
ac.setText(tv.getText().toString()+" ");
ac.setSelection((ac.getText().toString()).length());
}
});