【问题标题】:Detect if recycler view items fit the screen检测回收站视图项目是否适合屏幕
【发布时间】:2017-12-02 15:57:33
【问题描述】:

我有一个聊天活动,里面有一个显示聊天消息项的回收器视图。

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

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

欢迎提出建议。

【问题讨论】:

    标签: android android-recyclerview


    【解决方案1】:

    您好,我不确定您是否还在处理这个问题,因为它已经有一段时间了,但最近我遇到了类似的情况,这就是我处理它的方式。希望它可以帮助其他人,而不是将来遇到这个问题。

    首先我假设您在这里使用反向布局。

    关键是在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);
    });
    

    【讨论】:

      猜你喜欢
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 2018-03-27
      • 1970-01-01
      相关资源
      最近更新 更多