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客户端展示的行为.假设您在聊天屏幕上,并且您在顶部消息,但现在添加新图像或消息,您可以看到它神奇地跳到屏幕底部显示添加的最后一条消息.没有任何明显的尴尬滚动所有消息 - 所以这似乎可能,但我不知道如何.我想知道这是怎么做的.
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,但这是必要的,因为如果不是你将等到所有视图都被绘制以滚动到指定的位置.它逐个加载项目,例如它从新列表中加载第一个项目并从当前显示项目的末尾滚动.
| 归档时间: |
|
| 查看次数: |
2582 次 |
| 最近记录: |