检测回收者查看项目是否适合屏幕

时间:2017-12-02 15:57:33

标签: android android-recyclerview

我在其中有一个聊天活动,有一个显示聊天消息项目的回收者视图。

我在决定回收者视图的堆栈方向时感到困惑,我希望在活动启动时直接从底部显示项目,所以我这样做:

     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);
        }

建议表示赞赏。

1 个答案:

答案 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);
});