我是Android開發的新品...來自iPhone和.Net背景。我看到這個問題非常類似,但他們都沒有處理SimpleCursorAdapter。從ListView中獲取與SimpleCursorAdapter綁定的選定項目
我有使用遊標從一個SQLite查詢我的ListView綁定數據提供了基本ListActivity:
ListAdapter adapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_1,
c,
new String[] {"name"},
new int[] {android.R.id.text1});
setListAdapter(adapter);
然後單擊項目時:
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
//Difference between this:
Cursor c = (cursor)l.getItemAtPosition(position);
//and this??
Cursor c = (Cursor)l.getAdapter().getItem(position);
int categoryId = c.getInt(0);
}
這是正確的方式獲取所選元素的ID?這似乎很奇怪,因爲我不認爲我可以在數據庫關閉後使用我的遊標(這是綁定後)。當我似乎無法找到從該ID獲取實際項目的方式時,傳入的ID的點是什麼?另外,我不明白爲什麼getItemAtPosition()會返回一個遊標......遊標綁定到整個列表;不只是一排。最後,如果這是正確的,那麼獲得光標的兩種方式之間是否存在差異?謝謝。
謝謝!我打電話給startManagingCursor,但我不明白爲什麼到現在爲止!幾個問題...所以即使我調用SQLiteDatabase.close(),這不會停止我的光標訪問它?而ListView似乎沒有getCursor()方法。最後,傳遞給我的方法的ID是自動從我的數據庫的ID?謝謝! – GendoIkari 2011-05-27 19:51:42
啊,如果你調用'close',那麼你的ListView可能會停止工作:通常我所做的就是重用我的Application對象作爲我的數據庫適配器:調用在'onCreate'中打開並在'onTerminate'中關閉,然後使用它數據庫連接生命週期到應用程序的生命週期。至於'getCursor',我的錯誤:它應該是'Cursor c =((SimpleCursorAdapter)l.getAdapter())。getCursor();'。是的,ID是數據庫中出來的:它非常方便。 – Femi 2011-05-27 20:12:22
再次感謝您的幫助! – GendoIkari 2011-05-27 20:16:30