我有2個片段A和B.滾動型的片段保留位置
A包含了一個滾動型,如果我向下滾動,按下一個按鈕,片段A被碎片B換成現在,我按後退按鈕和片段A回到屏幕上,但ScrollView與我切換到片段B時不在同一位置。
但是,當我對包含ListView的Fragment(而不是ListFragment!)執行相同操作時,滾動位置保持不變。
有什麼特別的我必須做我的ScrollView?
問候,丹尼爾。
我有2個片段A和B.滾動型的片段保留位置
A包含了一個滾動型,如果我向下滾動,按下一個按鈕,片段A被碎片B換成現在,我按後退按鈕和片段A回到屏幕上,但ScrollView與我切換到片段B時不在同一位置。
但是,當我對包含ListView的Fragment(而不是ListFragment!)執行相同操作時,滾動位置保持不變。
有什麼特別的我必須做我的ScrollView?
問候,丹尼爾。
您的片段保存數據(列表滾動位置),然後你就可以從onCreate(Bundle)
,onCreateView(LayoutInflater, ViewGroup, Bundle)
或onActivityCreated(Bundle)
訪問來實現onSaveInstanceState(Bundle)
。
編輯:根據this answer,你只需要在你的Fragment中調用setRetainInstance(true)
。
由於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;
}
});
ScrollView
都和NestedSrollView
具有從BaseSavedState
延長內部類這節省的scrollPosition
狀態。你僅僅需要給你的滾動視圖的ID在我的onCreate保存和恢復,將自動實例狀態(你不需要手動調用它)..見Could I keep position of ScrollView after back to prev Fragment like ListView?
我已經嘗試過setRetainInstance(真)( ...)不起作用:(。只有在Activity保存實例狀態時才調用onSaveInstanceState()。 –
您沒有提到兼容性庫,但可以[this](http://stackoverflow.com/a/6947996/1837158)是否有問題? – Nutomic
您不需要調用'setRetainInstance'來解決這樣的問題。 –