我有一个NestedScrollView填充了一个垂直的LinearLayout,它本身有一堆各种视图类型的子项:多个TextViews,两个静态GridViews,甚至一个FrameLayout来显示所有这些下面的片段.
按下后退按钮时,如果用户滚动到某个点以下,而不是完成活动,则调用“scrollToTop”方法:
public static void scrollToTop(final NestedScrollView scrollview) { new Handler().postDelayed(new Runnable() { public void run() { scrollview.fullScroll(NestedScrollView.FOCUS_UP); } },200); }
这适用于我的应用程序的早期版本,该版本位于Play商店中.但是现在,在更新我的应用程序以定位Android Oreo(并将支持库更新到版本26.0.2)之后,它似乎从NestedScrollView的原始滚动位置下方开始滚动,而不是滚动到顶部,并停止它的位置.所以它只是一个奇怪的口吃.然而,在某些位置,它确实滚动到顶部(尽管非常罕见且不一致),而其他位置实际上滚动到底部,出于什么原因我不明白.
我一直在试验视图的可聚焦性,但无济于事.例如,我读到静态GridViews可能会在滚动时中断焦点.我也尝试了各种不同的方法来向上滚动,例如
scrollview.pageScroll(View.FOCUS_UP);
和
scrollview.smoothScrollTo(0,0);
解决方法
试试这个
将android:descendantFocusability =“blocksDescendants”添加到NestedScrollView内的LinearLayout,这也是
滚动到NestedScrollView的顶部使用此
NestedScrollView.scrollTo(0,0);
编辑
使用fling()
和smoothScrollTo
来收集
nestedScrollView.post(new Runnable() { @Override public void run() { nestedScrollView.fling(0); nestedScrollView.smoothScrollTo(0,0); } });