2014-03-13 23 views
0

我有一個ListView(VL)HListView(HL)作爲項目(書架樣式)。我正在保存VL狀態並且它正在工作,但現在我想要的是保存它的項目狀態,因爲我希望HL在再次呈現時恢復其狀態。
所以我做這樣的事情在我BookShelfBaseAdapterListView onRestoreInstanceState

private List<Book> bookList; 
private Parcelable[] bookListStates; 

@Override 
public View getView(int position, View view, ViewGroup parent) { 
    final int fPosition = position; 
    ... 

    holder.booksHListView.setOnScrollListener(new ContentListOnScrollListener(holder) { 
     @Override 
     public void onScrollStateChanged(AbsHListView view, int scrollState) {} 

     @Override 
     public void onScroll(AbsHListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
      bookListStates[fPosition] = holder.booksHListView.onSaveInstanceState(); 
     } 
    }); 

    if (bookListStates[fPosition] != null) { 
     holder.booksHListView.onRestoreInstanceState(bookListStates[fPosition]); 
    } 
    ... 
} 



當列表項再次呈現他們不是在他們之前的狀態......我什麼我在這裏做錯了嗎?
謝謝你的時間。

+0

onSaveInstanceState和onRestoreInstanceState是您不應直接調用它們的生命週期方法。你能發佈適配器的完整代碼嗎?然後我將能夠回答你的問題。 –

+0

爲什麼我不應該叫他們來保存我的列表狀態? – GuilhE

+0

因爲它們是生命週期方法,所以你不應該自己調用它們。如果你想持久化你的ListView中的數據,你必須堅持你的適配器的數據源。 –

回答

0

我發現這個問題,我不得不切換 「節電編碼」 與 「恢復密碼」,這樣的:

@Override 
public View getView(int position, View view, ViewGroup parent) { 
final int fPosition = position; 
... 

if (bookListStates[fPosition] != null) { 
    holder.booksHListView.onRestoreInstanceState(bookListStates[fPosition]); 
} 

holder.booksHListView.setOnScrollListener(new ContentListOnScrollListener(holder) { 
    @Override 
    public void onScrollStateChanged(AbsHListView view, int scrollState) {} 

    @Override 
    public void onScroll(AbsHListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
     bookListStates[fPosition] = holder.booksHListView.onSaveInstanceState(); 
    } 
}); 
... 

}

它的工作現在:)

0
if (bookListStates[fPosition] != null) { 
    holder.booksHListView.onRestoreInstanceState(bookListStates[fPosition]); 
} 

holder.booksHListView.setOnScrollListener(new ContentListOnScrollListener(holder) { 
    @Override 
    public void onScrollStateChanged(AbsHListView view, int scrollState) {} 

    @Override 
    public void onScroll(AbsHListView view, int firstVisibleItem, int visibleItemCount, int  totalItemCount) { 
     bookListStates[fPosition] = holder.booksHListView.onSaveInstanceState(); 
    } 
相關問題