键盘打开时向 RecyclerView 添加项目时向下滚动

问题描述 投票:0回答:2

当我添加新的列表项时,在键盘仍然打开的情况下,该列表项出现在键盘后面,因此不可见。如何自动向下滚动使其可见?

请记住,我已经解决了以下问题:

  • 打开键盘时,滚动 RecyclerView 以使最后一项可见:已解决

最后一个剩下的问题是键盘已经打开的情况。当我第一次打开键盘时,它工作正常。当我点击“发送”时,该项目就会添加到键盘后面,并且当我希望它向上滚动时

  1. 我点击了“发送消息”

  2. 这就是发生的事情。它隐藏在键盘后面

android android-recyclerview scroll keyboard
2个回答
3
投票

将 LayoutManager 设置为反向布局,以使 RecyclerView 保留其底部边缘而不是顶部边缘的位置:

LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setReverseLayout(true);
myRecycler.setLayoutManager(layoutManager);

应该不再需要自动滚动到适配器的最后位置,因此,如果您以前有这样做的代码,则应该将其删除。

您还必须反转适配器中数据集的顺序以匹配您最初的顺序(如果您的数据最初按升序排序,那么您应该将其更改为降序)。 对于您的情况,您可能希望按时间降序排序,以便将最新的项目排列在 RecyclerView 的底部,最旧的项目排列在顶部。

并且,如果您直接添加到适配器的数据集,则应该添加到适配器列表的开头:

myDataList.add(0, myNewItem); // Add to the beginning of the list shifting previous items over notifyDataSetChanged(); // Notify the adapter to refresh
    

0
投票
我遇到了这个问题,为我解决的问题是这样的(基于我的代码)

// some fragment context //... binding.recyclerViewChat.post { binding.recyclerViewChat.scrollToPosition(messageList.lastIndex) }
我猜逻辑是布局更新与适配器添加是异步的,因此如果您立即调用滚动,它可能会获得陈旧的值

© www.soinside.com 2019 - 2024. All rights reserved.