【问题标题】:Directly jump to the last position in android recyclerview rather than scrolling through to the last position在android recyclerview中直接跳转到最后一个位置而不是滚动到最后一个位置
【发布时间】:2019-06-18 23:44:43
【问题描述】:

我有一个 Android 异构 RecyclerView,我将 ImageView 和 TextView 混合在一起。我可以在最后一个位置按需添加图像或文本。如果用户已经在 RecyclerView 的最后一项,这不是问题,因为新的文本或图像只是简单地附加并显示为新的最后一项,用户可以立即查看。

但问题来了: 假设我在 RecyclerView 中有 100 张图像,而用户正在查看第一张图像(在 RecyclerView 的顶部)。假设用户添加了新图像或文本(作为最后一项附加)。现在为了向用户显示这个项目,我正在调用“smoothScrollToPosition”,如下面的代码所示:

int position = myModel.getMyGenericModels().size() - 1;
myAdapter.notifyItemInserted(position);
//Smooth scroll the recyclerview to the last message
myRecyclerView.smoothScrollToPosition(position);

smoothScrollToPosition 确实有效,但这个逻辑的问题是: 鉴于用户正在查看第一张图片,为了显示添加的最新图片,RecyclerView 滚动浏览所有 100 张图片,直到到达最后一张图片。这太尴尬了,因为它需要几秒钟的时间,而且您可以从字面上看到这些图像在屏幕上滚动,直到到达最后一张图像。

我的问题是,我如何直接从用户正在查看的第一张图片跳转到向用户显示添加的最后一张图片?

要明确我正在寻找的那种行为就像 Android WhatsApp 客户端所展示的那种行为。假设您在聊天屏幕上,并且在顶部消息上,但现在添加新图像或消息,您会看到它神奇地跳到屏幕底部,显示添加的最后一条消息。所有消息都没有这种明显的尴尬滚动 - 所以这似乎是可能的,但我不知道如何。我想知道这是怎么做到的。

【问题讨论】:

  • 一定要加到最后一个位置吗?
  • 是的,这就是我需要的功能。
  • scrollToPosition 到底有什么问题?
  • 请阅读我指出问题的帖子。 scrollToPosition 确实有效,但这个逻辑的问题是:鉴于用户正在查看第一张图片,为了显示添加的最新图片,RecyclerView 滚动浏览所有 100 张图片,直到到达最后一张图片。这太尴尬了,因为它需要几秒钟的时间,而且你可以从字面上看到这些图像在屏幕上滚动,直到它到达最后一张图像。
  • 对不起,我应该澄清一下我使用的是smoothScrollToPosition。

标签: android android-recyclerview


【解决方案1】:

scrollToPosition 就是您要找的那个。

  • smoothScrollToPositon 正在通过动画加载当前和滚动到的位置之间的视图,因此滚动到指定位置需要相对较长的时间。

  • scrollToPosition 不同,它只加载指定位置的视图,并根据方向加载它之后或之前的视图。

示例

这是一个 RecyvlerView

Item 0  ---
Item 1    |
Item 2    | Those appearing on screen
Item 3  ---
Item 4
Item 5
Item 6
Item 7
Item 8
Item 9

smoothScrollToPosition(9) 将滚动到末尾一个一个地加载项目 4、5、6、7、8、9。

scrollToPosition(9) 只会一个一个地加载项目 6、7、8、9,并滚动到末尾。

我认为混淆来自于使用scrollToPosition 获得的滚动动画,但这是一件必要的事情,因为如果不是,您将等到所有视图都绘制后滚动到指定位置。它从新列表中加载第一项并从当前显示的列表项的末尾滚动。

【讨论】:

  • 很棒的插图和解释。我希望我已经使用您所做的简单图形表示来说明这一点!啊,我明白了。我确实在使用“smoothScrollToPosition”并盲目地假设它与“scrollToPosition”相同。大错。现在我将其更改为 scrollToPosition 并且行为肯定要好得多。但是就像你描述的那样,我们仍然可以看到滚动发生,它不是像 WhatsApp android 客户端那样发生的“对齐位置”(当然他们是他们自己的联盟​​)。但不知何故,他们似乎正在这样做。
  • scrollToPosition 要好得多,但它仍然不是我在 WhatsApp 中看到的“快速定位”行为。但它确实解决了平滑滚动的尴尬滚动,这将阻碍我想要的功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多