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

直接跳转到android recyclerview中的最后一个位置,而不是滚动到最后一个位置,android,android-recyclerview,Android,Android Recyclerview,我有一个Android异构回收视图,其中ImageView和TextView混合在一起。我可以根据需要在最后一个位置添加图像或文本。如果用户已经在RecyclerView的最后一项中,这不是问题,因为新文本或图像只是附加在后面,并显示为新的最后一项,用户可以立即查看 但问题是: 假设我在RecyclerView中有100个图像,用户正在查看第一个图像(在RecyclerView的顶部)。假设用户添加了一个新的图像或文本(作为最后一项追加)。现在,为了向用户显示此项,我调用“smoothScrol

我有一个Android异构回收视图,其中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
就是您要找的

  • 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,并滚动到末尾

滚动位置(9)将仅逐个加载项目6、7、8、9,滚动至末尾


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

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,并滚动到末尾

滚动位置(9)将仅逐个加载项目6、7、8、9,滚动至末尾


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

是否必须将其添加到最后一个位置?是的,这就是我需要的功能。
scrollToPosition
到底有什么问题?请阅读我指出问题的帖子。scrollToPosition确实可以工作,但这种逻辑的问题是:如果用户正在查看第一个图像,为了显示添加的最新图像,RecyclerView将滚动所有100个图像,直到到达最后一个图像。这是非常尴尬的,因为它需要几秒钟的时间,你可以看到这些图像在屏幕上滚动直到到达最后一个图像。对不起,我应该澄清我使用的是smoothScrollToPosition。它必须添加到最后一个位置吗?是的,这就是我需要的功能。
scrollToPosition
到底有什么问题?请阅读我的文章,我已经指出了这个问题。scrollToPosition确实可以工作,但这种逻辑的问题是:如果用户正在查看第一个图像,为了显示添加的最新图像,RecyclerView将滚动所有100个图像,直到到达最后一个图像。这太尴尬了,因为它需要几秒钟的时间,你可以看到这些图像在屏幕上滚动直到到达最后一个图像。对不起,我应该澄清我使用的是smoothScrollToPosition。非常棒的插图和解释。我希望我能用你做的简单的图画来说明这一点!啊,我明白了。我确实使用了“smoothScrollToPosition”,并盲目地假设它与“scrollToPosition”相同。大错误。现在我把它改成了scrollToPosition,它的行为肯定好多了。但正如你所描述的,我们仍然可以看到滚动的发生,而不是像WhatsApp android客户端那样的“快速定位”(当然,他们是他们自己的联盟)。但不知何故,他们似乎正在这样做。scrollToPosition好得多,但它仍然不是我在WhatsApp中看到的“快速定位”行为。但它确实解决了令人尴尬的滚动问题