我有一个回调,在通过LinearLayoutManager.smoothScrollToPosition()
程序化滚动到RecyclerView的某个项目后触发。用户点击一个项目,右边的项目滚动到RecyclerView的顶部。我对LinearLayoutManager进行了分类,使其始终捕捉到该项目的顶部。
这适用于滚动事件被触发的情况,但是当RecyclerView已经处于正确的位置时,我没有得到onScrollStateChanged
回调,因为没有滚动发生。无论如何,是否有办法获得该事件?就像事先决定RecyclerView是否需要滚动一样?检查RecyclerView是否需要滚动
回答
我发现下面的解决办法自己:
// get the view the user selected
View view = mLayoutManager.findViewByPosition(index);
// get top offset
int offset = view.getTop();
if (offset == 0) { // the view is at the top of the scrollview
showDetailViewInternal(event);
} else {
// scrolling
}
如果它是列表中的最后一项,它将不起作用,因为它永远不会滚动到顶部。 –
希望下面的代码将有助于
if(LinearLayoutManager.findFirstCompletelyVisibleItem() == yourDesiredPosition) {
//do your stuff
} else {
LinearLayoutManager.scrollToPositionWithOffset(yourDesiredPosition, offset);
//onScrollStateChanged would be trigger then.
}
不,这只是告诉我,我正在寻找的项目是完全可见的屏幕上。它没有告诉我关于滚动位置的任何信息。该项目可能是可见的,但在屏幕的底部,然后RecyclerView将滚动。 – Alf
我对你的要求有一个想法。如果在这种情况下,所有适配器项目都不覆盖整个屏幕,则不会触发滚动事件。尝试将透明视图添加到适配器布局,并在不包含整个屏幕的情况下使其显示在最后一个项目中。为透明视图指定一个固定的高度,以便它离开屏幕。 – user320676
为什么这意味着滚动事件不会被解雇?无论如何,我发现比将透明视图添加到我的布局更好的解决方案。看到我上面的答案。 – Alf
- 1. 检查RecyclerView是否滚动无法正常工作
- 2. 确定UIWebView是否需要滚动
- 3. 如何检查scrollview/recyclerview是向上还是向下滚动android
- 4. 检查osKernalSysTick()是否需要环绕?
- 5. 检查是否仍然需要blob
- 6. 何时检查是否需要GC?
- 7. 需要检查文件是否存在?
- 8. 检查XSLT是否需要参数?
- 9. 需要帮助检查是否为{}
- 10. WCF UserNamePasswordValidator是否需要检查PrimaryIdentity.IsAuthenticated?
- 11. 线程需要检查是否连续
- 12. angularjs - 检查是否需要$ scope。$ apply
- 13. 检查当前活动是否需要活动(同一父母)
- 14. 如何检测我的recyclerview是否跳过滚动框架?
- 15. 检查UIWebView是否滚动到底部
- 16. 检查滚动是否被触发
- 17. 如何检查网页是否滚动?
- 18. 如何检查ScrollView是否可滚动
- 19. 检查wx.lib.scrolledpanel.ScrolledPanel是否正在滚动
- 20. 检查儿童recyclerview是否回收
- 21. RecyclerView需要沿着活动
- 22. Java Socket BufferedReader是否需要检查和检查数据?
- 23. 如何检查服务器是否需要重新启动
- 24. 如何检查Tomcat6是否已停止并需要启动
- 25. 检查滚动条是否向下滚动一半
- 26. 检查Windows窗体滚动条是否一直向下滚动?
- 27. 检查滚动条是否可以在WebBrowser中集中/滚动
- 28. HtmlElement中的CssClassSet类是否需要检查类是否存在?
- 29. 是否需要检查jQuery库是否已加载?
- 30. 是否需要检查js变量是否为d3选择?
你可以检查,如果你想滚动到该项目(位置)已经在调用之前的屏幕* LinearLayoutManager.smoothScrollToPosition()* – Bugdr0id
这是不够的,因为它可能在屏幕上,但不在视图的顶部,在这种情况下无论如何滚动都会发生。 – Alf
如何layoutManager.findFirstCompletelyVisibleItemPosition() – SoroushA