2014-02-25 24 views
1

我需要一個ListView通過創建一個名爲PullToRefreshStickyListView類是PullToRefreshBase的擴展結合了PullToRefreshListViewStickyHeaderListView的功能的類是在這裏:結合PullToRefreshListView和StickyHeaderListView,列表視圖不記得片段變化滾動位置

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

沒關係,我發現瞭如何解決這個問題。事實證明,列表視圖需要有一個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 s自己的id。