组合PullToRefreshListView和StickyHeaderListView,列表视图不记得片段更改时的滚动位置

时间:2014-02-25 15:56:57

标签: android android-fragments pull-to-refresh

我需要一个ListView,它通过创建一个名为PullToRefreshStickyListView的类来结合PullToRefreshListViewStickyHeaderListView的功能,该类是此类的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做一些事情,但我对此并不太熟悉,所以我真的不知道为什么。也许有人可以给我指点?感谢。

1 个答案:

答案 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个人自己的身份。

相关问题