2

私はこれを理解するために何日も費やしましたが、運がありません。こちらから回答いただければ幸いです。cursorLoader メソッドを使用して、コンテンツ プロバイダからスピナーにデータをロードしようとしました。スピナーはデータを受け取ったようですが、いくつかのドロップダウン項目 (テキストなし) が作成されていましたが、ドロップダウン リストにデータが見つかりませんでした。

同じカーソルを使用してデータを取得して配列に入れ、配列をスピナーにバインドすると、すべてのアイテムが正しく表示されるため、問題はプロバイダーからではないと思います。

以下は私のコードです、

package com.supreme2u.shopper;

import android.app.Activity;
import android.app.LoaderManager;
import android.content.CursorLoader;
import android.content.Loader;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;

import com.supreme2u.shopper.provider.ShopperProvider;

public class RecordActivity extends Activity  implements LoaderManager.LoaderCallbacks<Cursor>  {
private SimpleCursorAdapter sAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_record);

    getLoaderManager().initLoader(0, null, this);     
    sAdapter = new SimpleCursorAdapter(
            this,
            android.R.layout.simple_spinner_item,
            null, 
            new String[] {ShopperProvider.TAG_COLUMN_TAG}, 
            new int[] {R.id.spinner1},
            0);
    sAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
    Spinner v = (Spinner) findViewById(R.id.spinner1);
    v.setAdapter(sAdapter);
}

public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
    CursorLoader cursorLoader = new CursorLoader(
            this, 
            ShopperProvider.CONTENT_URI_TAGS, 
            ShopperProvider.TAG_COLUMNS, 
            null, 
            null, 
            null);
    return cursorLoader;
}

public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
    sAdapter.swapCursor(arg1);
}

public void onLoaderReset(Loader<Cursor> arg0) {
    sAdapter.swapCursor(null);
}

}

そして私のレイアウトxml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<Spinner
    android:id="@+id/spinner1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
</LinearLayout>

そして、抽出した ShopperProvider クラスから、

public static final Uri CONTENT_URI_TAGS = Uri.parse("content://com.supreme2u.shopper.provider/tableTag");

public static final String TAG_COLUMN_ID = "_id";
public static final String TAG_COLUMN_TAG = "tagName";
public static final String[] TAG_COLUMNS = {"_id","tagName"};
4

1 に答える 1

1

問題は、SimpleCursorAdapter の構築、特に 2 番目と 5 番目のパラメーター ( l​​ayoutto ) にあります。ドキュメントから:

layout : このリスト項目のビューを定義するレイアウト ファイルのリソース識別子。レイアウト ファイルには、少なくとも「to」で定義された名前付きビューを含める必要があります。

to : 「from」パラメーターで列を表示する必要があるビュー。これらはすべて TextView である必要があります。このリストの最初の N 個のビューには、from パラメータの最初の N 列の値が与えられます。カーソルがまだ使用できない場合は、null になる可能性があります。

したがって、 layoutにandroid.R.layout.simple_spinner_itemを使用するのは正しいです。ただし、渡されるビューはTextView である必要があり、android.R.layout.simple_spinner_item内に含まれいる必要があります。つまり、 R.id.spinner1ではなくandroid.R.id.text1です。

つまり、代わりに次の構造を使用します。

sAdapter = new SimpleCursorAdapter(
        this,
        android.R.layout.simple_spinner_item,
        null, 
        new String[] {ShopperProvider.TAG_COLUMN_TAG}, 
        new int[] {android.R.id.text1},
        0);
于 2015-12-29T16:59:23.987 に答える