Android ScrollView处于片段保留位置

Android ScrollView处于片段保留位置,android,scrollview,fragment,Android,Scrollview,Fragment,我有两个片段A和B A包含一个滚动视图,如果我向下滚动并按下按钮,片段A将被片段B替换。现在我按下后退按钮,片段A返回屏幕,但滚动视图与切换到片段B时的位置不同 但当我对包含ListView的片段(不是ListFragment!)执行相同操作时,滚动位置将保持不变 我的ScrollView有什么特别的吗 你好,丹尼尔。正如Nutomic所说,需要保存位置,但即使如此,在onCreate、onCreateView或onActivityCreated中,ScrollView的高度将为0 我最终使用了

我有两个片段A和B

A包含一个滚动视图,如果我向下滚动并按下按钮,片段A将被片段B替换。现在我按下后退按钮,片段A返回屏幕,但滚动视图与切换到片段B时的位置不同

但当我对包含ListView的片段(不是ListFragment!)执行相同操作时,滚动位置将保持不变

我的ScrollView有什么特别的吗


你好,丹尼尔。

正如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;
    }
});

ScrollView
NestedSrollView
都从
BaseSavedState
扩展了内部类,它保存了
scrollPosition
的状态。您只需为滚动视图提供一个id,即可自动保存和恢复其实例状态(无需手动调用)。。请参见

onPreDraw()
现在将Kotlin与Android KTX结合使用更加容易
view.doOnPreDraw{actionToBetrigged()}
。签出:我的布局层次是