1

を使用しSpinnerてデータを入力する要素を取得しました。また、のカスタム行レイアウトに使用しています。すべてが正常に機能し、データを取得し、アイテムはカスタムレイアウトを使用します。CursorSimpleCursorAdaptersetViewBinderSpinnerSpinnerSpinner

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

        }

        });

問題

4

2 に答える 2

0

あなたがすべきことは、OnItemSelectedListenerを実装することです。リスナーでは、アイテムが選択されるたびに、スピナーを閉じた後にアクセスできるある種の変数にそのアイテムを保存します。

于 2011-11-06T21:21:26.180 に答える
0

さあ行こう:

DropDownViewを設定adapter.setDropDownViewResource(R.layout.spinner_row); する必要があるため、DropDownView の外観が定義され、SimpleCursorAdapter コンストラクターで定義されたレイアウトは、(閉じた) スピナー オブジェクト自体 (ドロップダウン ビューではありません!) の項目のレイアウトを定義します。

そのため、SimpleCursorAdapter で定義されているものとまったく同じ DropDownView の別のレイアウトを使用android:layout_height="?android:attr/listPreferredItemHeight"すると便利です。ドロップダウンビュー レイアウトのテキストビューに使用する違いを除いて、それにプッシュされた値を適切な対応するフィールドに設定できます。と android:layout_height="wrap_content" スピナーレイアウトのテキストビュー用!

于 2011-11-07T17:32:07.343 に答える