我需要一个ListView
,它通过创建一个名为PullToRefreshStickyListView的类来结合PullToRefreshListView和StickyHeaderListView的功能,该类是此类的PullToRefreshBase的扩展:
public class PullToRefreshStickyListView extends PullToRefreshBase<StickyListHeadersListView>{
public PullToRefreshStickyListView(Context context) {
super(context);
}
public PullToRefreshStickyListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public com.handmark.pulltorefresh.library.PullToRefreshBase.Orientation getPullToRefreshScrollDirection() {
return Orientation.VERTICAL;
}
@Override
protected StickyListHeadersListView createRefreshableView(Context context, AttributeSet attrs) {
StickyListHeadersListView view = new StickyListHeadersListView(context, attrs);
return view;
}
@Override
protected boolean isReadyForPullEnd() {
return false;
}
@Override
protected boolean isReadyForPullStart() {
StickyListHeadersListView view = getRefreshableView();
if (view.getWrappedList().getChildCount() == 0)
return true;
return view.getWrappedList().getChildAt(0).getTop() == 0;
}
}
一切都很好,但我的问题是,当第一次显示包含此类的片段,隐藏并再次显示时,列表视图似乎不记得它的最后一个垂直滚动位置。我错过了什么吗?我想我应该用onSaveInstance做一些事情,但我对此并不太熟悉,所以我真的不知道为什么。也许有人可以给我指点?感谢。
答案 0 :(得分:0)
没关系,我发现了如何解决这个问题。事实证明,列表视图需要具有ID才能记住其滚动状态。我刚用这个方法添加了这一行:
@Override
protected StickyListHeadersListView createRefreshableView(Context context, AttributeSet attrs) {
StickyListHeadersListView view = new StickyListHeadersListView(context, attrs);
view.setId(R.id.sticky_header);
return view;
}
在res中创建了文件ids.xml,并为粘贴标题视图添加了一个id,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item type="id" name="sticky_header"></item>
</resources>
这当然可以解决问题。
记住孩子,给你的ListView
个人自己的身份。