我有一個ListView(VL)HListView(HL)作爲項目(書架樣式)。我正在保存VL狀態並且它正在工作,但現在我想要的是保存它的項目狀態,因爲我希望HL在再次呈現時恢復其狀態。
所以我做這樣的事情在我BookShelfBaseAdapter:ListView 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]);
}
...
}
當列表項再次呈現他們不是在他們之前的狀態......我什麼我在這裏做錯了嗎?
謝謝你的時間。
onSaveInstanceState和onRestoreInstanceState是您不應直接調用它們的生命週期方法。你能發佈適配器的完整代碼嗎?然後我將能夠回答你的問題。 –
爲什麼我不應該叫他們來保存我的列表狀態? – GuilhE
因爲它們是生命週期方法,所以你不應該自己調用它們。如果你想持久化你的ListView中的數據,你必須堅持你的適配器的數據源。 –