AutoCompleteTextView отображает 'android.database.sqlite.SQLiteCursor@' … после делания выбора

Я использую следующий код для установки адаптера (SimpleCursorAdapter) для AutoCompleteTextView

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"/>

Выпадающее, кажется, работает правильно и показывает список объектов. Когда я делаю выбор из списка, я получаю объект sqlite ('android.database.sqlite.SQLiteCursor@'...) в textview. Кто-либо знает то, что вызвало бы это, или как разрешить это?

спасибо

Хорошо я могу сцепиться в событие OnItemClick, но TextView.setText () часть виджета AutoCompleteTextView обновляется после этой точки. Событие 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, View arg1,
                int arg2, 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();
        }

    });

Кто-либо alse имеют какие-либо идеи о том, как переопределить обновление TextView?

спасибо

patrick

10
задан bugzy 30 January 2010 в 20:15
поделиться

2 ответа

Когда я делаю выбор из списка Я получаю объект SQLite (скрытый) ) в текстовом представлении.

Вы не говорите, что это «TextView» или как оно относится к спинну .

Я собираюсь принять образование догадаться и предположить, что вы просто назначаете выбранный элемент из спиннера в TextView .

Выбранный элемент из Spinner с использованием SimplecurSorAdapter представляет собой курсор , указывающий на ряд выбранный пользователем. Реализация TOSTRING () курсор даст вам что-то похожее на Android.database.sqlite.sqlitecursor @ , в зависимости от того, где появился курсор .

Скорее всего, вы собираетесь позвонить GetString () на этом курсор , для извлечения некоторого значения столбца и назначить его в TextView обсуждаемый.

0
ответ дан 4 December 2019 в 00:24
поделиться

Я не думаю, что вам нужно обновлять текст для 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 укажет вам на нужные страницы документации.

9
ответ дан 4 December 2019 в 00:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: