AutoCompleteTextView在选择后显示’android.database.sqlite.SQLiteCursor@’…

我使用以下代码为AutoCompleteTextView设置适配器(SimpleCursorAdapter)
mComment = (AutoCompleteTextView) findViewById(R.id.comment);

    Cursor cComments = myAdapter.getdistinctComments();
    scaComments = new SimpleCursorAdapter(this,R.layout.auto_complete_item,cComments,new String[] {DBAdapter.KEY_LOG_COMMENT},new int[]{R.id.text1});

    mComment.setAdapter(scaComments);

auto_complete_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

而thi是实际控件的xml

<AutoCompleteTextView
                        android:id="@+id/comment"
                        android:hint="@string/COMMENT"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:textSize="18dp"/>

下拉列表似乎正常工作,并显示一个项目列表.当我从列表中进行选择时,在textview中得到一个sqlite对象(‘android.database.sqlite.sqliteCursor @’…).
任何人知道会导致什么,还是如何解决这个问题?

谢谢

好的,我可以挂钩OnItemClick事件,但AutoCompleteTextView小部件的TextView.setText()部分在此之后被更新. OnItemSelected()事件永远不会触发,并且在首次显示下拉项目时触发onnothingSelected()事件.

mComment.setonItemClickListener( new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0,View arg1,int arg2,long arg3) {
            // Todo Auto-generated method stub

            SimpleCursorAdapter sca = (SimpleCursorAdapter) arg0.getAdapter();


            String str = getSpinnerSelectedValue(sca,arg2,"comment");

            TextView txt = (TextView) arg1;
            txt.setText(str);
            Toast.makeText(ctx,"onItemClick",Toast.LENGTH_SHORT).show();

        }

    });
    mComment.setonItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0,long arg3) {


            Toast.makeText(ctx,"onItemSelected",Toast.LENGTH_SHORT).show();

        }

        @Override
        public void onnothingSelected(AdapterView<?> arg0) {
            // Todo Auto-generated method stub
            Toast.makeText(ctx,"onnothingSelected",Toast.LENGTH_SHORT).show();
        }

    });

任何人有什么想法如何覆盖TextView的更新?

谢谢

帕特里克

解决方法

我不认为你应该更新AutoCompleteTextView的文本.它应该自动执行.它通过调用[CursorAdapter.convertToString(…)] [1]方法来实现.如果你阅读了它指出的方法的描述.因此,如果您正在编写自己的CursorAdapter,您将覆盖该方法,以返回您希望在建议列表中显示的任何文本.这个人做的很好,解释如何做到这一点:
线86 – http://thinkandroid.wordpress.com/2010/02/08/writing-your-own-autocompletetextview/

但是,由于您使用的是SimpleCursorAdapter,因此您无法覆盖此方法.相反,您需要实现/创建一个[SimpleCursorAdapter.CursorToStringConverter] [2]并将其传递到[SimpleCursorAdapter.setCursorToStringConverter(…)] [3]中:

SimpleCursorAdapter adapter = new SimpleCursorAdapter(context,layout,cursor,from,to);
 CursorToStringConverter converter = new CursorToStringConverter() {

    @Override
    public CharSequence convertToString(Cursor cursor) {
       int desiredColumn = 1;
       return cursor.getString(desiredColumn);
    }
 }; 

 adapter.setCursorToStringConverter(converter);

或者如果您不想创建一个CursorToStringConverter,那么使用[SimpleCursorAdapter]. setStringConversionColumn(…)] [4]方法.但是我认为您仍然必须将CursorToStringConverter显式设置为null:

int desiredColumn = 1;
 adapter.setCursorToStringConverter(null);
 adapter.setStringConversionColumn(desiredColumn);

对不起,垃圾邮件拦截器不会让我发布链接到Android文档,描述我上面发布的链接.但是,快速的Google搜索将指向正确的文档页面.

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...