2013-10-10 31 views
0

我有一個ListFragment多次實例化,我想保存並恢復適配器的狀態以正確執行「onListItemClick」方法。將適配器的狀態保存在ListFragment的不同實例中

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    mCallback.onPlaceClick(adapter.getItem(position)); 
} 

當我打開的第一次一切正常的應用程序,但是當我點擊一個項目,另一個活動是創建的,當我回到那個片段的項目是在自己的位置,但我得到adapter.getItem()中的IndexOutOBoundsException,它表示大小爲0,但我可以看到List中的元素!

如何保存和恢復適配器對象的狀態? (這是ListFragment類的一個實例字段)

回答

0

看一看Fragment.onSaveInstanceState()。如果實現這個並填充Bundle,那麼當你的片段被重新創建時,相同的包將被傳回給你。

如何將套接字的狀態保存在一個包中是另一個問題。這取決於你,但是舉例來說,一種方法是使元素類支持你的適配器可分段,並使用putParcelableArrayList()。在onCreate(),方法,你會做這樣的事情,

if (savedInstanceState != null && savedInstanceState.containsKey("myState")) { 
    List<MyObj> objs = savedInstanceState.getParcelableArrayList("myState"); 
    myAdapter = new MyAdapter(..., objs, ...); 
} 
+0

感謝您的答覆,但我只是解決了只用實例字段,避免任何靜態字段,在我的代碼的問題是這一點..! –

相關問題