Fragment中的ScrollView保留位置

时间:2012-11-21 18:56:10

标签: android scrollview fragment

我有2个片段A和B.

A包含一个ScrollView,如果我向下滚动并按下一个按钮片段A被片段B取代。现在我按下后退按钮,片段A返回到屏幕,但是ScrollView不在同一个位置。当我切换到片段B时。

但是当我对包含ListView的Fragment(不是ListFragment!)做同样的事情时,滚动位置就会保持不变。

我的ScrollView有什么特别之处吗?!

问候,丹尼尔。

3 个答案:

答案 0 :(得分:8)

ScrollViewNestedSrollView都有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)