2012-09-15 35 views
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"}; 
+1

了... ...(僅每次發佈後的問題,然後才發現出了愚蠢的錯誤)......這個sAdapter應綁定到的觀點,不是R.id.spinner1,而是android.R.id.text1。 – user1672819

回答

2

問題就出在你的建築SimpleCursorAdapter,具體是第二個和第五個參數() t)。從文檔:

佈局:定義此列表項視圖的佈局文件的資源標識符。佈局文件應至少包含在「to」中定義的那些命名視圖。

:應在「from」參數中顯示列的視圖。這些都應該是TextView。該列表中的前N個視圖被賦予from參數中前N列的值。如果光標尚不可用,則可以爲null。

那麼,你是正確使用android.R.layout.simple_spinner_item佈局。然而,對於傳遞給意見必須android.R.layout.simple_spinner_item內TextViews並載:即android.R.id.text1而不是R.id.spinner1

總之,使用這種結構來代替:

sAdapter = new SimpleCursorAdapter(
     this, 
     android.R.layout.simple_spinner_item, 
     null, 
     new String[] {ShopperProvider.TAG_COLUMN_TAG}, 
     new int[] {android.R.id.text1}, 
     0);