我有2个片段A和B.
A包含一个ScrollView,如果我向下滚动并按下一个按钮片段A被片段B取代。现在我按下后退按钮,片段A返回到屏幕,但是ScrollView不在同一个位置。当我切换到片段B时。但是当我对包含ListView的Fragment(不是ListFragment!)做同样的事情时,滚动位置就会保持不变。
我的ScrollView有什么特别之处吗?!
问候,丹尼尔。
答案 0 :(得分:8)
ScrollView
和NestedSrollView
都有BaseSavedState
扩展的内部类,它保存了scrollPosition
的状态。您只需要为滚动视图提供 id 即可自动保存并恢复其实例状态(您无需手动调用)..请参阅Could I keep position of ScrollView after back to prev Fragment like ListView?
答案 1 :(得分:0)
由于Nutomic表示需要保存位置,但即便如此,在onCreate,onCreateView或onActivityCreated
中ScrollView的高度将为0我最终使用的是OnPreDrawListener,效果非常好。
scrollView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
scrollView.scrollTo(0, position);
mView.getViewTreeObserver().removeOnPreDrawListener(this);
return true;
}
});
答案 2 :(得分:-3)
您必须在片段中实施onSaveInstanceState(Bundle)
以保存数据(列表滚动位置),然后您可以从onCreate(Bundle)
,onCreateView(LayoutInflater, ViewGroup, Bundle)
或onActivityCreated(Bundle)
进行访问。< / p>
修改:根据this answer,您只需要在片段中调用setRetainInstance(true)
。