当我添加新的列表项时,在键盘仍然打开的情况下,该列表项出现在键盘后面,因此不可见。如何自动向下滚动使其可见?
请记住,我已经解决了以下问题:
最后一个剩下的问题是键盘已经打开的情况。当我第一次打开键盘时,它工作正常。当我点击“发送”时,该项目就会添加到键盘后面,并且当我希望它向上滚动时
将 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
// some fragment context
//...
binding.recyclerViewChat.post {
binding.recyclerViewChat.scrollToPosition(messageList.lastIndex)
}
我猜逻辑是布局更新与适配器添加是异步的,因此如果您立即调用滚动,它可能会获得陈旧的值