【发布时间】:2017-06-29 08:09:01
【问题描述】:
我有一个垂直滚动的RecyclerView 和水平滚动的内部 RecyclerViews,就像这样。
通过这个实现,用户可以同步滚动每个水平的recyclerview。但是,当用户垂直滚动到父 recyclerView 时,刚刚附加在窗口上的新水平 recyclerview 不会显示在相同的滚动 x 位置。这个是正常的。因为它刚刚创建。
所以,我试图在它显示之前滚动到滚动位置。就像这样:
注意:这是在垂直方向的父recyclerview的适配器中。
@Override
public void onViewAttachedToWindow(RecyclerView.ViewHolder holder) {
super.onViewAttachedToWindow(holder);
CellColumnViewHolder viewHolder = (CellColumnViewHolder) holder;
if (m_nXPosition != 0) {
// this doesn't work properly
viewHolder.m_jRecyclerView.scrollBy(m_nXPosition, 0);
}
}
如您所见,scrollBy 对 row 10、row 11、row 12 和 row 无效13 之后,我调试了代码以找出发生了什么。当我使用 scrollBy 设置滚动位置时,childCount() 为 row 10、row 11、row 12 和 row 13 所以他们不会滚动。但为什么 ?为什么别人工作?
- 我该如何解决这个问题?
- onViewAttachedToWindow 是滚动新附加 recyclervViews 的正确位置吗?
注意:我也测试过scrollToPosition(),没有出现这样的问题。但我不能在我的情况下使用它。因为用户可以滚动到可能不是确切位置的任何 x 位置。所以我需要使用 x 值而不是位置来设置滚动位置。
编辑:可以查看The source code
【问题讨论】:
-
能把这段代码分享到github或者其他地方方便调试
-
我已经编辑了我的问题。你可以检查整个代码。
-
为什么不滚动onBind?
-
@natario ScrollBy 在 onBind() 上不起作用。因为在那个时候,布局管理器还没有测量/替换等到视图。但是,昨天我找到了解决方案。如果你想知道,我会写下我的答案。
-
我已经在运行 API 21、22、23 和 24 的模拟器上尝试了您的源代码,但我无法重现该问题。你在哪里运行你看到这个问题的代码?设备、模拟器、API 级别?
标签: android scroll android-recyclerview