美文网首页
Android RecyclerView滚动到底部不彻底问题

Android RecyclerView滚动到底部不彻底问题

作者: 启朗 | 来源:发表于2019-08-29 17:36 被阅读0次

    项目中涉及聊天功能,原本需求是如果有新消息,不管是否在看历史消息,直接滚动到底部:

    mRecyclerView.scrollToPosition(list.size() - 1);
    

    但后来客户发现很不友好,于是让产品改成,如果用户在看历史消息就不强制滚到底部。我实现的方式是如果新消息到了,会判断RecyclerView是否还能向下滑动,如果能就不滚到底部:

    if(mRecyclerView.canScrollVertically(1)){
    //还可以向上滑动(还没到底部)
    }else{
    //滑动到底部了
    }
    

    这边顺带说明下如果要判断是否在顶部:

    if(mRecyclerView.canScrollVertically(-1)){
    //还可以向下滑动(还没到顶部)
    }else{
    //滑动到顶部了
    }
    

    但是这么写在测试中发现,在滚到底部后,有时候新消息到了,RecycleView有时候并没有滚到底部,会有点偏差,这导致后面的消息到了不会自动滚到底部。

    解决方法:

     LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
     linearLayoutManager.setStackFromEnd(true);
     linearLayoutManager.scrollToPositionWithOffset(mAdapter.getItemCount() - 1, Integer.MIN_VALUE);
    
     mRecyclerView.setLayoutManager(linearLayoutManager);
    

    关键代码是:

     linearLayoutManager.setStackFromEnd(true);
    

    这个方法是让先添加的item会被顶上去,最新添加的item每次都会显示在最下面 。但如果Item数量太少 , 就会出现RecyclerView顶部空了很多空白出来 , 所以需要将RecyclerView的高度设置为 wrap_content。

     linearLayoutManager.scrollToPositionWithOffset(mAdapter.getItemCount() - 1, Integer.MIN_VALUE);
    

    这个方法是定位到指定项如果该项可以置顶就将其置顶显示,这样问题就解决啦!

    相关文章

      网友评论

          本文标题:Android RecyclerView滚动到底部不彻底问题

          本文链接:https://www.haomeiwen.com/subject/gntwectx.html