我在其中有一个聊天活动,有一个显示聊天消息项目的回收者视图。
我在决定回收者视图的堆栈方向时感到困惑,我希望在活动启动时直接从底部显示项目,所以我这样做:
linear_layout_manager.setStackFromEnd(true);
(linear_layout_manager)是我的回收站视图的布局管理器。
问题
如果我按照上面提到的那样做,那么当我发送第一条消息时,我遇到了问题。它从底部开始堆叠,使回收者视图的上方空白。
为什么我需要从头开始使用堆栈?
您可能会问我为什么不在活动启动时滚动到底部,我会回答您,如果我这样做,那么用户可以将回收者视图滚动到底部。
但我需要立即显示活动发布的最后一项。
我的想法
我认为这个想法可以帮助,但不确定它是否有效:
if(/*items are all fit to screen*/){
linear_layout_manager.setStackFromEnd(true);
}else{
linear_layout_manager.setStackFromEnd(false);
}
建议表示赞赏。
答案 0 :(得分:0)
嗨我不确定你是否还在处理这个问题,因为它已经有一段时间了,但最近我遇到了类似的情况,这就是我处理它的方式。希望它可以帮助别人,而不是将来遇到这个问题。
首先,我假设你在这里使用反向布局。
关键是要在OnLayoutChangeListener
内执行此操作,以便在增长/缩小列表中setStackFromEnd()
内的项目数量时可以动态调整。
您还可以在最后执行notifyDataSetChanged()
以强制重新布置回收站视图。
recyclerView.addOnLayoutChangeListener((view, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
boolean isPageFilledWithItems =
recyclerView.computeVerticalScrollRange() > recyclerView.getHeight();
((LinearLayoutManager) recyclerView.getLayoutManager()).setStackFromEnd(!isPageFilledWithItems);
});