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

前端之家收集整理的这篇文章主要介绍了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搜索将指向正确的文档页面.

原文链接:https://www.f2er.com/android/312113.html

猜你在找的Android相关文章