2012-11-21 69 views
1

我有2個片段A和B.滾動型的片段保留位置

A包含了一個滾動型,如果我向下滾動,按下一個按鈕,片段A被碎片B換成現在,我按後退按鈕和片段A回到屏幕上,但ScrollView與我切換到片段B時不在同一位置。

但是,當我對包含ListView的Fragment(而不是ListFragment!)執行相同操作時,滾動位置保持不變。

有什麼特別的我必須做我的ScrollView?

問候,丹尼爾。

回答

-1

您的片段保存數據(列表滾動位置),然後你就可以從onCreate(Bundle)onCreateView(LayoutInflater, ViewGroup, Bundle)onActivityCreated(Bundle)訪問來實現onSaveInstanceState(Bundle)

編輯:根據this answer,你只需要在你的Fragment中調用setRetainInstance(true)

+1

我已經嘗試過setRetainInstance(真)( ...)不起作用:(。只有在Activity保存實例狀態時才調用onSaveInstanceState()。 –

+0

您沒有提到兼容性庫,但可以[this](http://stackoverflow.com/a/6947996/1837158)是否有問題? – Nutomic

+1

您不需要調用'setRetainInstance'來解決這樣的問題。 –

0

由於Nutomic所說的位置需要被保存但即使如此,了滾動的高度將在的onCreate,onCreateView 0或onActivityCreated

我結束了使用OnPreDrawListener和它工作得很好。

scrollView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
    @Override 
    public boolean onPreDraw() { 
     scrollView.scrollTo(0, position); 
     mView.getViewTreeObserver().removeOnPreDrawListener(this); 
     return true; 
    } 
});