2010-09-08 36 views
1

我使用自定義CursorAdapter從Sqlite數據庫的數據填充ListView。從列表視圖中移動光標位置時丟失了活動

當用戶離開我的活動並稍後回來時,我放鬆了光標處的位置,並且ListView再次定位到第一個項目。

跳過startManagingCursor()時,它按預期工作。我如何解決這個問題?

這裏是()稱爲OnCreate中的代碼片段:

cursor = db.getAll();  
startManagingCursor(cursor); 
myAdapter = new MyAdapter(listview.getContext(), cursor, true); 
listview.setAdapter(myAdapter); 
+0

您可能需要將光標位置存儲在一個包中 – LatinSuD 2010-09-08 22:10:09

+0

這對我來說似乎是一個錯誤。我無法弄清楚是什麼導致它,但你是正確的,它的託管光標和自動重新查詢。這看起來很奇怪。爲什麼這種方便與正常的ListView行爲衝突,似乎是錯誤的設計。重新請求有可能導入全新的數據,在這種情況下,ListView無法在邏輯上恢復狀態。大多數情況下,雖然查詢並不實際改變數據集,所以它肯定應該恢復位置。 – jfelectron 2011-01-29 07:44:55

回答

3

LatinSuD是正確的,你要存儲在包中的位置。當活動再次激活時,託管的光標會被重新查詢,因此您將失去您的位置。您可以查看notepad3教程以獲取保存狀態信息的示例。 http://developer.android.com/resources/tutorials/notepad/notepad-ex3.html

+0

我試過,但cursorFav.moveToPosition(storedposition);不會更改ListView位置。 – Goran 2010-09-08 22:59:59

+0

嘗試使用listview.setSelection(savedposition); – Mike 2010-09-08 23:24:41

+0

謝謝。實際上,我必須記住Listview中的選定項目位置ItemClickListener(觸摸模式下的listview.getSelectedItemPosition()始終返回INVALID_POSITION),然後通過listview.requestFocusFromTouch()恢復它。 listview.setSelection(savedposition); – Goran 2010-09-09 16:13:21