Метод прослушивания щелчка элемента Spinner с помощью SimpleCursorAdapter и ViewBinder - PullRequest
1 голос
/ 07 ноября 2011

Я получил элемент Spinner, который я заполняю данными из Cursor, используя SimpleCursorAdapter.Также я использую setViewBinder для пользовательского макета строки Spinner.Все работает отлично, Spinner получает данные, а элементы Spinner используют пользовательский макет.

Но нажатие на элементы из выпадающего списка Spinner ничего не делает .Он не устанавливает выбранный элемент как выбранный и не закрывает раскрывающийся список.Я не знаю, что мне нужно делать, поэтому выбранный элемент из списка передается логике Spinner и работает так, как должен.Вот макет, который я использую:

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

<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:baselineAligned="false"
    android:clickable="true"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:src="@drawable/ic_launcher" />


    <TextView
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="6dp"
        android:layout_weight="1"
        android:textColor="#424242"
        android:gravity="center_vertical"
        android:text="Textfield" />

</LinearLayout>
</LinearLayout>

, а вот ViewBinder:

static final ViewBinder VIEW_BINDER = new ViewBinder(){
    public boolean setViewValue(View view, Cursor cursor, int columnIndex){

        if (view.getId() == R.id.text){

            String local = view.getResources().getString(cursor.getInt(columnIndex));
            ((TextView) view).setText( local );

            return true;
        }
        if (view.getId() == R.id.icon){

            int icon = cursor.getInt(columnIndex);
            ((ImageView) view).setImageResource(icon);

            return true;
        }

        return false;
    }
};

и вот как я добавляю данные в Spinner:

private Spinner spinner;
private DBHandler dbhandler;
private SimpleCursorAdapter adapter;
private final String[] from = new String[]{dbhandler.LIB_LOCAL, dbhandler.LIB_ICON};
private final int[] to = { R.id.text, R.id.icon };  
@Override
protected void onResume(){
    super.onResume();

    Cursor cursor = dbhandler.getLibEntries();


    adapter = new SimpleCursorAdapter(this, R.layout.spinner_row, cursor, from, to);
    adapter.setViewBinder(VIEW_BINDER);
    spinner.setAdapter(adapter);
}

Добавление OnItemSelectedListener, как предложено ниже в этом посте, было реализовано, как показано ниже, но не решает проблему.Также я не уверен, как setOnItemSelectedListener мог бы помочь мне получить поля данных, которые мне понадобятся позже:

    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                int position, long id) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            // TODO Auto-generated method stub

        }

        });

the problem

Ответы [ 2 ]

0 голосов
/ 07 ноября 2011

здесь мы идем:

необходимо установить adapter.setDropDownViewResource(R.layout.spinner_row); DropDownView определяет внешний вид DropDownView, а макет, определенный в конструкторе SimpleCursorAdapter, определяет макет элементов самого (закрытого) объекта счетчика (не его раскрывающийся вид!).

Итак, хорошо иметь другой макет для DropDownView, который точно такой же, как тот, который определен в SimpleCursorAdapter, поэтому значения, помещенные в него, могут быть установлены в соответствующие поля справа, за исключением того, что я использую android:layout_height="?android:attr/listPreferredItemHeight" для текстовое представление макета раскрывающегося списка и Android: layout_height = "wrap_content" для текстового представления макета счетчика!

0 голосов
/ 07 ноября 2011

Что вам нужно сделать, это реализовать OnItemSelectedListener .В слушателе, когда когда-либо выбран элемент, сохраните этот элемент в какую-то переменную, к которой вы сможете получить доступ после закрытия счетчика.

...