2101-view-autocomplete

来源:互联网 发布:矩阵计算 戈卢布 pdf 编辑:程序博客网 时间:2024/05/21 20:23

介绍使用CursorAdapter实现autocomplete

/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package com.example.android.apis.view;import com.example.android.apis.R;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.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;public class AutoComplete4 extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.autocomplete_4);        ContentResolver content = getContentResolver();        Cursor cursor = content.query(Contacts.People.CONTENT_URI,                PEOPLE_PROJECTION, null, null, Contacts.People.DEFAULT_SORT_ORDER);        ContactListAdapter adapter = new ContactListAdapter(this, cursor);        AutoCompleteTextView textView = (AutoCompleteTextView)                findViewById(R.id.edit);        textView.setAdapter(adapter);    }    // XXX compiler bug in javac 1.5.0_07-164, we need to implement Filterable    // to make compilation work    public static class ContactListAdapter extends CursorAdapter implements Filterable {        public ContactListAdapter(Context context, Cursor c) {            super(context, c);            mContent = context.getContentResolver();        }        @Override        public View newView(Context context, Cursor cursor, ViewGroup parent) {            final LayoutInflater inflater = LayoutInflater.from(context);            final TextView view = (TextView) inflater.inflate(                    android.R.layout.simple_dropdown_item_1line, parent, false);            view.setText(cursor.getString(5));            return view;        }        @Override        public void bindView(View view, Context context, Cursor cursor) {            ((TextView) view).setText(cursor.getString(5));        }        @Override        public String convertToString(Cursor cursor) {            return cursor.getString(5);        }        @Override        public Cursor runQueryOnBackgroundThread(CharSequence constraint) {        com.example.android.apis.Log.log("getFilterQueryProvider() : "+getFilterQueryProvider());            if (getFilterQueryProvider() != null) {                return getFilterQueryProvider().runQuery(constraint);            }            StringBuilder buffer = null;            String[] args = null;            com.example.android.apis.Log.log(constraint);            if (constraint != null) {                buffer = new StringBuilder();                buffer.append("UPPER(");                buffer.append(Contacts.ContactMethods.NAME);                buffer.append(") GLOB ?");                args = new String[] { constraint.toString().toUpperCase() + "*" };            }            com.example.android.apis.Log.log(constraint);            com.example.android.apis.Log.log(buffer.toString());                        Cursor cursor = mContent.query(Contacts.People.CONTENT_URI, PEOPLE_PROJECTION,                    buffer == null ? null : buffer.toString(), args,                    Contacts.People.DEFAULT_SORT_ORDER);                                    return mContent.query(Contacts.People.CONTENT_URI, PEOPLE_PROJECTION,                    buffer == null ? null : buffer.toString(), args,                    Contacts.People.DEFAULT_SORT_ORDER);        }        private ContentResolver mContent;            }    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,    };}
runQueryOnBackgroundThread method

每当用户输入字符的时候产生一个新的Cursor 更新autocomplete

如果要显示下面的提示效果


只需要给AutoCompleteTextView加上属性: android:completionHint="@string/autocomplete_5_hint

0 0
原创粉丝点击