2012-06-19 26 views
0

我目前使用simpleCursorAdaptor和遊標來加載數據的微調器,但我寧願將光標轉換爲簡單的數組,然後使用它代替(作爲列表很短並且是靜態的)。如何使用數組而不是光標的微調器

這樣做最簡單的方法是什麼?

我的代碼目前是:

private void loadEmployeeList(){ 
    LoginDataHandler dataHandler = new LoginDataHandler(getContentResolver()); 
    Cursor data = dataHandler.activeEmployeeList(); 
    if (null!=data){ 

     SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
       android.R.layout.simple_spinner_item, 
       data, 
       new String[]{MyobiliseData.Columns_employees.NAME}, 
       new int[] { android.R.id.text1 } 
       ); 

     // Attach the data to the spinner using an adaptor 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(adapter); 

    } 

} 
+0

爲什麼要光標數據轉換成數組? Android已經提供了一種使用CursorAdapter管理遊標數據的可行方法。 – user370305

+0

CursorAdapter是管理遊標數據的最好方法,它的ID沿着它微調或列表視圖。 – user370305

+0

謝謝 - 我認爲你可能是對的 - 我只是覺得這似乎是一個這麼小的名單大小開銷 – WaterBoy

回答

1
ArrayList<String> mArrayList = new ArrayList<String>(); 
for(data.moveToFirst(); !data.isAfterLast(); data.moveToNext()) { 
    mArrayList.add(data.getString(data.getColumnIndex(MyobiliseData.Columns_employees.NAME))); 
} 

現在你可以繼續你有光標數據的陣列mArrayList,

0

在這裏你去

ArrayList<String> list = new ArrayList<String>(); 
Cursor data = dataHandler.activeEmployeeList(); 

if (data.moveToFirst()) 
{ 
    do { 
     list.add(data.getString(data.getColumnIndex(MyobiliseData.Columns_employees.NAME))); 
     } while (data.moveToNext()); 
} 
+0

我忘了提及,在光標有一個「ID」字段,以及我需要在一起名稱。然後當用戶點擊這個名字時,我可以得到這個ID。這可能嗎? – WaterBoy

1

如果是短期和靜態的,你可能會考慮把它放在你的字符串.xml作爲一個數組並且以這種方式訪問​​它,而不是從數據庫中讀取和轉換爲數組時承受更大的開銷。

data.xml中

<resources> 
    <string-array name="States"> 
     <item>AL</item> 
     <item>AK</item> 
     <item>AR</item> 
    </string-array> 
</resources> 

然後使用它爲您的微調:

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
    getActivity(), R.array.States, android.R.layout.simple_spinner_item); 
adapter.setDropDownViewResource(R.layout.listlayout_black); 
final Spinner states = (Spinner) v.findViewById(R.id.mbr_state_spinner); 
states.setAdapter(adapter);