繁体   English   中英

ListView onRestoreInstanceState

[英]ListView onRestoreInstanceState

我有一个ListView(VL),其中HListView(HL)作为项目(书架样式)。 我正在保存VL状态并且它正在工作,但是现在我要保存的是项目状态,因为我希望HL在再次渲染时恢复其状态。
所以我在BookShelfBaseAdapter中做这样的事情:

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]);
    }
    ...
}



当列表项再次呈现时,它们不处于以前的状态...我在这里做错了什么?
谢谢你的时间。

我发现了问题,我必须将“保存代码”与“恢复代码”进行切换,如下所示:

@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();
   }
});   
...

}

现在正在工作:)

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();
   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM