直接跳转到android recyclelerview中的最后一个位置,而不是滚动到最后一个位置

jar*_*g 1 1 android android-recyclerview

我有一个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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ahm*_*azy 6

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
Run Code Online (Sandbox Code Playgroud)

smoothScrollToPosition(9)逐个加载项目4,5,6,7,8,9,并滚动到结尾.

scrollToPosition(9)将只逐个加载项目6,7,8,9,并滚动到结尾.

我认为混淆来自你从中获得的滚动动画scrollToPosition,但这是必要的,因为如果不是你将等到所有视图都被绘制以滚动到指定的位置.它逐个加载项目,例如它从新列表中加载第一个项目并从当前显示项目的末尾滚动.

  • 令人敬畏的插图和解释.我希望我用你所做的简单图示来说明这一点!啊,我明白了.我确实使用"smoothScrollToPosition"并盲目地假设它与"scrollToPosition"相同.大错.现在我将其更改为scrollToPosition,行为肯定要好得多.但是就像你描述的那样我们仍然可以看到滚动发生并且它不是像Snts to position那样发生在WhatsApp android客户端(当然它们是他们自己的联盟​​).但不知何故,他们似乎正在这样做. (2认同)