6

我有 2 个片段 A 和 B。

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

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

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

问候,丹尼尔。

4

2 回答 2

19

两者ScrollViewNestedSrollView都有扩展的内部类,BaseSavedState从中保存scrollPosition. 你只需要给你的滚动视图一个id来自动保存和恢复它的实例状态(你不需要手动调用它)..回到像 ListView 一样的 prev Fragment 后我可以保持 ScrollView 的位置吗?

于 2017-06-27T03:01:46.060 回答
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;
    }
});
于 2015-07-06T11:00:31.683 回答