`

2011.09.07(5)——— android 跨进程通信之content provider + AutoCompleteTextView

阅读更多
2011.09.07(5)——— android android 跨进程通信之content provider + AutoCompleteTextView

参考:http://blog.csdn.net/yan8024/article/details/6444368
http://www.blogjava.net/nokiaguy/archive/2010/07/31/327623.html

在上一节的基础上 增加了自动提示框的功能 就是将上一届的EditText改为AutoCompleteTextView

1、自定义provider需要修改 因为我们需要根据前几个字符来得到name
private  static  final  String AUTHORITY = "com.helloword.myprovider" ;
	private  static  UriMatcher uriMatcher;  
	private  static  final  int  ONE = 1 ;  
	private  static  final  int  MORE = 2 ;  
	private  static  final  int  MORE2 = 3 ;  
	static   
    {  
        //  添加访问ContentProvider的Uri   
        uriMatcher = new  UriMatcher(UriMatcher.NO_MATCH);  
        uriMatcher.addURI(AUTHORITY, "one" , ONE);  
        uriMatcher.addURI(AUTHORITY, "more/*" , MORE);  
        uriMatcher.addURI(AUTHORITY, "more2/*" , MORE2);  
    }  
@Override
	public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
		Cursor cursor = null;
		System.out.println("query");
		switch(uriMatcher.match(uri)){
			case ONE:
				cursor = db.query(TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder);
				break;
			case MORE:{
				String word = uri.getPathSegments().get(1);
				cursor = db.rawQuery("select * from "+TABLE_NAME+" where displayname like ?", new String[]{word+"%"});
				break;
			}
			case MORE2:
				String word = uri.getPathSegments().get(1);
				cursor = db.rawQuery("select displayname as _id from "+TABLE_NAME+" where displayname like ?", new String[]{word+"%"});
				break;
			default:
				throw new IllegalArgumentException("无效参数");
		}
		return cursor;
	}


注意看:case MORE2 时
select displayname as _id from 

必须更名为_id

2、从另一个应用调用:

main.xml

<AutoCompleteTextView 
		android:id="@+id/autoComplete"   
        android:layout_width="fill_parent"   
        android:layout_height="wrap_content">  
  </AutoCompleteTextView>  


auto.xml 下拉框的布局文件

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tvWordItem"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:gravity="center_vertical"
    android:paddingLeft="6dip"
    android:textColor="#000"    
    android:minHeight="?android:attr/listPreferredItemHeight"
/>



Activity

actv = (AutoCompleteTextView)findViewById(R.id.autoComplete);
        //将AutoCompleteTextView与ArrayAdapter进行绑定  
        //actv.setAdapter(adapter);  
        //设置AutoCompleteTextView输入1个字符就进行提示  
        actv.setThreshold(1);  
        actv.addTextChangedListener(new TextWatcher() {
			
			@Override
			public void onTextChanged(CharSequence s, int start, int before, int count) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void beforeTextChanged(CharSequence s, int start, int count, int after) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void afterTextChanged(Editable s) {
				if  ("" .equals(s.toString()))  
			        return ;  
				System.out.println(s.toString());
			    Uri uri = Uri.parse(MORE2 + "/"  + s.toString());  
			    //  从ContentProvider中获得以某个字符串开头的所有单词的Cursor对象   
			    Cursor cursor = getContentResolver().query(uri, null , null , null , null );  
			    adapter = new  TelListAdapter(helloWorldActivity.this ,  
			            cursor, true );  
			    actv.setAdapter(adapter);  
			}
		});


public class TelListAdapter extends CursorAdapter
    {
        private LayoutInflater layoutInflater;
        @Override
        public CharSequence convertToString(Cursor cursor)
        {
            return cursor == null ? "" : cursor.getString(cursor
                    .getColumnIndex("_id"));
        }
        //  用于将_id字段(也就是diaplayname字段)的值设置TextView组件的文本
        //  view参数表示用于显示列表项的TextView组件
        private void setView(View view, Cursor cursor)
        {
            TextView tvWordItem = (TextView) view;
            tvWordItem.setText(cursor.getString(cursor.getColumnIndex("_id")));
        }

        @Override
        public void bindView(View view, Context context, Cursor cursor)
        {
            setView(view, cursor);
        }

        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent)
        {
            View view = layoutInflater.inflate(R.layout.auto, null);
            setView(view, cursor);
            return view;
        }
        public TelListAdapter(Context context, Cursor c, boolean autoRequery)
        {
            super(context, c, autoRequery);
            //  通过系统服务获得LayoutInflater对象
            layoutInflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
    }



在编写DictionaryAdapter类时应注意如下3点:
1. 为了将Cursor对象与AutoCompleteTextView组件绑定, DictionaryAdapter类必须从CursorAdapter类继承。
2. 由于CursorAdapter类中的convertToString方法直接返回了Cursor对象的地址,因此,在DictionaryAdapter类中必须覆盖convertToString方法,以返回当前选中的单词。CursorAdapter类中的convertToString方法的源代码。
在这里要注意一下,当选中AutoCompleteTextView组件中单词列表中某一个单词后,系统会用convertToString方法的返回值来设置AutoCompleteTextView组件中的文本。因此,必须使用Cursor的getString来获得相应的字段值。
3.  由于将Cursor对象与Adapter绑定时必须要有一个叫“_id”的字段,因此,在本例中将english字段名映射成了“_id”字段。
为了监视AutoCompleteTextView组件中的文本输入情况,需要实现android.text.TextWatcher接口。在该接口中只需要实现afterTextChanged方法即可,
4.  在DictionaryAdapter类中需要使用bindView和newView方法设置每一个列表项。bindView方法负责设置已经存在的列表项,也就是该列表项已经生成了相应的组件对象。而newView方法负责设置新的列表项,在该方法中需要创建一个View对象来显示当前的列表项

分享到:
评论

相关推荐

    Android仿百度谷歌自动提示——AutoCompleteTextView

    本文将详细介绍如何在Android中仿照百度和谷歌的自动提示功能,利用`AutoCompleteTextView`控件来实现这一功能。 `AutoCompleteTextView`是Android SDK中的一个视图组件,它继承自`EditText`,增加了自动补全的功能...

    实用自动补全工具AutoCompleteTextView.zip

    AutoCompleteTextView是Android开发中一个非常实用的控件,它为用户提供了一种便捷的输入方式——自动补全。这个控件允许用户在输入时显示一个下拉列表,该列表包含了与用户当前输入相匹配的建议选项,从而提高输入...

    android中AutoCompleteTextView使用

    在Android开发中,`AutoCompleteTextView` 是一个非常实用的组件,它提供了自动补全功能,用户在输入时可以接收到下拉列表的建议,提高了输入效率。`MultiAutoCompleteTextView` 是 `AutoCompleteTextView` 的扩展,...

    AutoCompleteTextView+SQLite实现自动检索

    在Android开发中,`AutoCompleteTextView` 是一个非常实用的组件,它允许用户在输入时自动显示匹配的建议列表,极大地提高了用户体验。结合SQLite数据库,我们可以实现高效、动态的数据检索,为用户提供实时的搜索...

    Android自动文本填充AutoCompleteTextView

    在Android开发中,AutoCompleteTextView是一个非常实用的控件,它允许用户在输入时自动显示匹配的建议列表,极大地提高了用户体验。本实例将深入探讨如何使用AutoCompleteTextView,并结合具体的...

    Android中AutoCompleteTextView的使用步骤.pdf

    AutoCompleteTextView是Android开发中一个常用的UI组件,它在用户输入文本时提供自动补全功能,极大地提高了用户体验。本文将详细介绍如何在Android中使用AutoCompleteTextView。 1. **AutoCompleteTextView的基本...

    Android 学习笔记(十四):Activity-AutoCompleteTextView.doc

    Android 学习笔记(十四)主要聚焦于`AutoCompleteTextView`组件的使用,这是一种增强版的`EditText`,提供了自动补全功能。`AutoCompleteTextView`允许用户输入文本,并在用户输入达到一定字符数时显示一个下拉列表...

    android之AutoCompleteTextview控件

    在Android开发中,`AutoCompleteTextView` 是一个非常实用的控件,用于提供用户输入时的自动补全功能。这个控件能够显著提升用户体验,因为它能够根据用户输入的部分字符快速匹配并显示可能的选择,帮助用户更快地...

    安卓textView相关-androidAutoCompleteTextView邮箱后缀自动补全.rar

    在Android开发中,`AutoCompleteTextView` 是一个非常实用的组件,它允许用户在输入时获得下拉建议,类似于搜索引擎的自动填充功能。这个压缩包文件"安卓textView相关-androidAutoCompleteTextView邮箱后缀自动补全....

    AutoCompleteTextView

    AutoCompleteTextView是Android开发中一个常用的UI组件,它属于EditText的一种扩展,主要功能是在用户输入时提供自动补全建议。这个简单的例子展示了如何利用自定义布局来实现AutoCompleteTextView的功能,使得用户...

    Android中AutoCompleteTextView的常用方法一览.pdf

    在Android开发中,AutoCompleteTextView是一个非常实用的控件,它能为用户提供输入提示,即在用户输入文本时显示与输入内容匹配的建议列表。这个组件通常用于提升用户体验,特别是在需要用户输入特定数据(如城市名...

    Android开发手册——API函数详解.pdf

    Android开发是目前移动应用开发中非常重要的一环,尤其是在构建跨平台应用时,对Android API的了解程度直接影响到开发效率和应用的质量。在给定文件中,我们可以看到一份关于Android开发中TextView组件的API详细描述...

    安卓Android源码——MyAutoCompleteTextview.rar

    本资源"安卓Android源码——MyAutoCompleteTextview.rar"显然是一个自定义版本的 `AutoCompleteTextView` 实现,我们可以从这个源码中学习到如何扩展和定制这一组件。 1. **自定义`AutoCompleteTextView`** - ...

    Android自定义AutoCompleteTextView

    在Android开发中,AutoCompleteTextView是一个非常常用的组件,它提供了自动补全的功能,适用于用户输入时需要提示相关信息的场景,比如搜索框、地址输入等。本文将深入探讨如何自定义AutoCompleteTextView,以满足...

    android使用AutoCompleteTextView自定义适配器样式

    在Android开发中,`AutoCompleteTextView` 是一个非常实用的组件,它允许用户在输入时自动显示匹配的建议列表。通常,我们使用`ArrayAdapter`来连接数据源和`AutoCompleteTextView`,但有时默认的功能可能无法满足...

    AutoCompleteTextView从服务器上获得数据显示下拉列表

    AutoCompleteTextView是Android系统提供的一种可以自动补全的文本输入控件,它允许用户在输入时根据已有的数据集匹配并显示建议的选项。这个功能通常用于搜索框、地址输入等场景,提升用户体验。在本主题中,我们将...

    Android_AutoCompleteTextView

    **Android AutoCompleteTextView详解** 在Android开发中,`AutoCompleteTextView`是一个非常实用的控件,它能够为用户输入提供动态的建议或提示,提升用户体验。这个控件类似于搜索引擎的自动补全功能,当用户在...

Global site tag (gtag.js) - Google Analytics