嵌套的ScrollView自动滚动到底部

43

我有一个GridView,它在一个NestedScrollView中。我使用下面的代码来在GridView的内容更改时调整其大小。这个方法很好用,但是当我从应用程序的第三个片段切换回第二个片段(其中包含了NestedScrollView)时,NestedScrollView会滚动到最底部。奇怪的是,从第一个片段向第二个片段切换时不会发生这种情况。而且,在调整完GridView大小之后也不会发生这种情况。

我该如何阻止NestedScrollView滚动到底部?

private static void resizeGridView(GridView gridView, int items, int columns) {
    ViewGroup.LayoutParams params = gridView.getLayoutParams();
    params.height = singleGridHeight * items;
    gridView.setLayoutParams(params);
    gridView.requestLayout();
}
以下的系统方法在切换片段时被调用: enter image description here

尝试这个:https://dev59.com/TFsW5IYBdhLWcg3w8q_2#36261638 - Konstantin Konopko
2个回答

191
在NestedScrollView的子布局中添加android:descendantFocusability="blocksDescendants"

9
你在开玩笑吗?这真的有效了!非常感谢你。 - Luke Allison
3
难以置信,这个技巧最终解决了我们经历了相当长时间的许多小UI故障。我们在各种屏幕中有很多级别深的嵌套回收/滚动视图,而这一行代码最终帮助我们理解了问题。 - Matthew Housser
1
英雄!我已经寻找那个解决方案很长时间了!难以置信它是如此简单!谢谢你! - romaneso
2
EditText之后不可聚焦。 - Peter
1
非常顺利地完成了!!!只需要添加一件事情,就是在添加上述解决方案后,EditText将不会获得焦点,然后在EditText触摸监听器中,只需添加yourChildView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);。您的EditText将获得焦点。 - Shailesh
显示剩余3条评论

1
如果我在GridView的onLayoutChanged()方法末尾添加nestedScrollView.scrollTo(0, 0);,问题就会得到解决。但是,更有意义的做法是防止nestedScrollView自动滚动。有什么想法吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接