【问题标题】:ScrollView in Fragment retain positionFragment中的ScrollView保留位置
【发布时间】:2012-11-21 18:56:10
【问题描述】:

我有 2 个片段 A 和 B。

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

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

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

你好,丹尼尔。

【问题讨论】:

    标签: android scrollview fragment


    【解决方案1】:

    ScrollViewNestedSrollView 都有从BaseSavedState 扩展的内部类,它保存了scrollPosition 的状态。你只需要给你的滚动视图一个 id 来自动保存和恢复它的实例状态(你不需要手动调用它)。见Could I keep position of ScrollView after back to prev Fragment like ListView? p>

    【讨论】:

    • 我的布局层次结构是 我正在使用实时数据。正如你所建议的,我给我的 ScrollView 提供了 id,当从其他片段弹出时,滚动视图的位置仍然是静止的。知道我哪里出错了吗?
    • 感谢您的精彩回答!视图有一种常见的行为,即为配置更改和返回导航保留状态。例如 EditText 将保留输入文本的方向变化和后按。
    【解决方案2】:

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

    【讨论】:

    • onPreDraw() 现在可以更轻松地将 Kotlin 与 Android KTX 结合使用。 view.doOnPreDraw { actionToBeTriggered() }。结帐:github.com/android/android-ktx
    猜你喜欢
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多