我有一个包含许多其他视图的ScrollView(TextViews,ImageViews等)。 ScrollView比屏幕更高。我有一个AsyncTask,它根据http响应更新ScrollView的子节点。
我发现了一个有趣的行为,我无法弄清楚如何解决。如果我将任何孩子的可见性设置为View.INVISIBLE作为AsyncTask.onPostExecute()的一部分,一切正常。
但是,如果我将任何孩子的可见性设置为View.GONE,则在调用onPostExecute()时,ScrollView会从顶部跳转。究竟有多远似乎有所不同。我猜测重新布置ScrollView会导致它因某种原因从顶部滚动。
所以问题是:有没有办法阻止或解决这种行为?
PS。使用ScrollView.jump(FOCUS_UP)作为一种解决方法并不理想,因为即使他们打算向下滚动,也会强迫用户登顶。
编辑:实际上,我错了。问题不在于子视图被标记为已消失,问题是兄弟视图被标记为已消失并且ScrollView被调整大小。我的ScrollView位于一个也包含Button的LinearLayout中。当按钮设置为GONE时,ScrollView会调整大小以占用可用空间,使其从顶部滚动。不同的原因,尽管可能仍在寻找解决方法。
答案 0 :(得分:4)
我遇到了同样的问题。如果布局跳跃在你的顶部杠杆布局中添加了以下内容
android:descendantFocusability="blocksDescendants"
示例:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:descendantFocusability="blocksDescendants" >