第一个想法:我正在尝试同时滚动两个视图。意思是,当您滚动第一个时,第二个将同时滚动。布局如下:
现实:我有两个列表,一个是水平的,另一个是垂直的。水平的一个包含类别列表,垂直的一个包含这些类别的图像。类别1,类别2和类别3是RecyclerView的项目。 RV1,RV2和RV3是三个水平的回收站视图。目前,我将那些“ RV1,RV2和RV3”放入具有垂直ScrollView父级的垂直LinearLayout中。我不确定是否应该用recyclerview替换线性布局和scrollview。但是想法仍然相同,当用户滚动一个列表时,我需要滚动另一个列表。
更具体
答案 0 :(得分:1)
您应该能够按照以下所示对所需行为进行建模:
将onScrollListener
添加到水平类别RecyclerView。然后在onScrolled
内部,您可以根据自己的确切需求,使用firstVisibleItemPosition
或firstCompletelyVisibleItemPosition
确定最左边的项目。 (链接用于LinearLayoutManager,这主要是您在此处使用的内容)
注意:onScrolled
是在用户完成滚动后调用的,因此,如果需要实时滚动,可以尝试在onScrollStateChanged
内部进行类似的操作。
无论如何,您现在将有一个int
对应最左边类别的位置,它直接映射到需要带到顶部的相应RV的位置。
我建议您将ScrollView
和LinearLayout
的组合切换到RecyclerView,因为滚动到特定项目会更简单。您可以根据内容的滚动方式,将之前检索的索引传递到此垂直RecyclerView的smoothScrollToPosition
或scrollToPosition
方法。
您可以对垂直RV执行相同的操作,以自动滚动类别。如果我没记错的话,程序化scrollToPosition
调用不会触发任何附加的onScrollListener
。如果情况发生了变化,则必须确保它们不会不必要地不断滚动。