Java 安卓聊天,添加新消息显示

Java 安卓聊天,添加新消息显示,java,android,Java,Android,我正在与firebase和recyclerview进行聊天活动。我遇到了一个小问题。当新消息出现时,im使用notifyItemInserted,然后使用smoothScrollToPosition。当很少有第一条消息出现时(直到屏幕上没有满是消息),它们显示得非常流畅,看起来和Facebook Messenger中的一样,但当滚动到超出屏幕高度的新消息时,它会在眨眼间弹出,看起来不太好。我认为这与recyclerview的视图回收或平滑滚动有关,但我不知道如何处理这个问题 有些人问代码:

我正在与firebase和recyclerview进行聊天活动。我遇到了一个小问题。当新消息出现时,im使用notifyItemInserted,然后使用smoothScrollToPosition。当很少有第一条消息出现时(直到屏幕上没有满是消息),它们显示得非常流畅,看起来和Facebook Messenger中的一样,但当滚动到超出屏幕高度的新消息时,它会在眨眼间弹出,看起来不太好。我认为这与recyclerview的视图回收或平滑滚动有关,但我不知道如何处理这个问题

有些人问代码:

    mMessagesList.add(message);
    mChatRecyclerAdapter.notifyItemInserted(mChatRecyclerAdapter.getItemCount()-1);
    rvChatMessages.smoothScrollToPosition(mChatRecyclerAdapter.getItemCount()-1);
你们能和我分享一些建议吗?
谢谢

您的问题中有很多未知的地方,但一般来说,如果您使用RecyclerView(如您所述),您可以通过在
LinearLayoutManager
中将
reverseLayout
设置为“true”来改善您的UI体验。这样做会使您的邮件显示在列表的底部。如果您进行分页,这仍然有其自身的问题,这取决于您如何进行分页等


更新(以下聊天中的要点):

  • 使用反向LinearLayoutManager(构造函数选项)-与stackFromBottom不同
  • 将数据添加到数据收集的开头(.Add(0,…)
  • 在适配器上调用notifyItemInserted(0)

  • 尝试将您的一些代码发布到您插入到recyclerview的位置,以便我们了解您正在使用的内容-无论何时使用notifyItemInserted,我都能顺利插入您想要的内容。感谢您的回答,我在我的LinearLayoutMenager方法中使用了:setStackFromEnd(true),它工作得很完美,但这根本不是问题。例如,当前7条消息到达时(它们适合屏幕,无需使用scrollToPosition),它们在recyclerview中的显示非常平滑。但当涉及到滚动到视图外(屏幕外)出现的新消息时然后我们滚动到它,这条消息显示的不是那么平滑。你的新消息总是出现在屏幕的底部吗?我试图理解为什么需要滚动定位。我可以想象,当用户在列表的上几页时,需要滚动,但当列表总是附加在底部时,则不需要滚动-总是有s从不在底部显示消息。如果操作正确(并且我正确理解了您的观点),您应该执行
    notifyItemInserted(0)
    而不是
    notifyItemInserted(mChatRecyclerAdapter.getItemCount()-1)
    噢,stackFromEnd和reverse布局之间存在差异。请检查我相信这会有帮助!我刚刚测试了您的更新答案,因此:没有smoothScrollToPosition方法,屏幕下方会显示新消息(我必须手动滚动),但使用smoothScrollToPosition方法,问题与以前相同:(