【问题标题】:Why does the scrollTo method inside RecyclerView not have any effect?为什么 RecyclerView 里面的 scrollTo 方法没有任何作用?
【发布时间】:2023-01-19 03:17:13
【问题描述】:

我有一个将 LinearLayoutManager 设置为水平的 RecyclerView。正如您在下面的代码中看到的,我正在尝试使用 ValueAnimator 从列表的第一项到列表的最后一项进行动画处理。在我的使用中,我不需要使用 scrollBy 或 scrollToPosition 方法。我需要使用 scrollTo 方法,但它没有效果。为什么会这样?

ValueAnimator valueAnimator = ValueAnimator.ofInt(0,activityMainBinding.rv.computeHorizontalScrollOffset());
valueAnimator.setDuration((100000)); valueAnimator.setStartDelay(1500);
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.addUpdateListener(valueAnimator1 -> { 
activityMainBinding.rv.scrollTo((int) valueAnimator1.getAnimatedValue(), 0); });
valueAnimator.start();

【问题讨论】:

  • 您能否提供该错误的最小工作示例?您是否尝试过使用 print 语句来确定是否有任何值返回意外输出?删除代码行后问题是否仍然存在?当有太多事情在起作用时,很难确定是什么导致了这个问题,比如 .getAnimatedValue 函数、.setDuration 位、.setStartDelay 位等。
  • @gabetucker22 我建立了一个新项目来用简单的 recyclerview 测试这个方法,但结果相同,方法没有滚动。

标签: android android-recyclerview


【解决方案1】:

如果你看里面回收视图,您将看到 scrollTo() 的以下内容:

@Override
public void scrollTo(int x, int y) {
    Log.w(TAG, "RecyclerView does not support scrolling to an absolute position. "
            + "Use scrollToPosition instead");
}

事实上,您应该在 logcat 中看到该文本。

你说你必须使用scrollTo(),但这似乎不可能。我建议您查看此要求以了解为什么需要 scrollTo()

我也会建议RecyclerView#computeHorizo​​ntalScrollOffset()没有做你认为它正在做的事情。

【讨论】:

    猜你喜欢
    • 2012-09-11
    • 2019-05-04
    • 1970-01-01
    • 2015-11-24
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    相关资源
    最近更新 更多