2011-03-29 37 views
19

我想要在更改方向時保存/恢復實例的ListView; Contact是要在自定義陣列適配器中顯示的項目。Android - 保存/恢復ListView適配器的正確方法是什麼?

我節省了名單onSaveInstanceState(Bundle savingInstanceState)活動方法適配器標的:

savingInstanceState.putSerializable(""+R.id.contactList, (Serializable)adapter.contacts()); 

然後在onRestoreInstanceState(Bundle savedInstanceState)我恢復並設置適配器:

List<Contact> contacts = 
     (List<Contact>)savedInstanceState.getSerializable(""+R.id.contactList); 
    ContactListAdapter adapter = 
     new ContactListAdapter((Context)this, android.R.layout.simple_list_item_1, contacts); 
    contactList.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 

是它做的正確方法?

你有更好/更聰明的解決方案嗎?

謝謝

+0

你從哪裏得到的數據?如果它已經在設備上,只需再次查詢。 – alexanderblom 2011-03-29 09:53:36

+0

@herbalessence我不同意。至於我可以看到它似乎關於如何/何時/是否更新來自哪種類型的線程的適配器數據。謝謝。 – 2011-03-29 10:19:58

+0

@alexanderblom數據來自互聯網,但當我改變方向時,他們已經在設備上;就在適配器內部) – 2011-03-29 10:22:38

回答

3
+0

我已成功保存/恢復另一個自定義對象,而不涉及Parcelable的東西。使用它有什麼好處(額外的複雜性)? – 2011-03-29 10:24:58

+3

使用Parceable可能更快,對於簡單的數據類,添加它並不麻煩。當這個工程實現onRetainNonConfigurationInstance()來快速傳遞狀態。 – alexanderblom 2011-03-29 11:01:39

相關問題