我有 2 个片段 A 和 B。
A 包含一个 ScrollView,如果我向下滚动并按下一个按钮 Fragment A 被 Fragment B 替换。现在我按下后退按钮,Fragment A 返回到屏幕,但 ScrollView 与它的位置不同我切换到片段 B。
但是,当我对包含 ListView 的 Fragment(不是 ListFragment!)执行相同操作时,滚动位置会保持不变。
我的 ScrollView 有什么特别之处吗?
问候,丹尼尔。
我有 2 个片段 A 和 B。
A 包含一个 ScrollView,如果我向下滚动并按下一个按钮 Fragment A 被 Fragment B 替换。现在我按下后退按钮,Fragment A 返回到屏幕,但 ScrollView 与它的位置不同我切换到片段 B。
但是,当我对包含 ListView 的 Fragment(不是 ListFragment!)执行相同操作时,滚动位置会保持不变。
我的 ScrollView 有什么特别之处吗?
问候,丹尼尔。
两者ScrollView
和NestedSrollView
都有扩展的内部类,BaseSavedState
从中保存scrollPosition
. 你只需要给你的滚动视图一个id来自动保存和恢复它的实例状态(你不需要手动调用它)..回到像 ListView 一样的 prev Fragment 后我可以保持 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;
}
});