RecyclerVie滚动到底部失败

因为用到了环信的即时通讯。界面呢都是自己写的。到后面发现一个问题,每次进入聊天的Activity会从本地加载聊天记录,案后调用Adapter的notifyDataSetChanged(),然后调用

mMessagerecyclerview.smoothScrollToPosition(mMessageList.size() - 1);

以为就能顺利滚动到底部去,但是事实却并不是,他确实有滚动,然而只是滚动到大概倒数第三左右的位置,消息当时大概十条多一点。后边去看了一下环信官方的Demo。他的读取消息滚动时放到Fragment的,在EaseBaseFragment的onActivityCreated里面调用setupView方法调用onMessageListInit再调用EaseChatMessageList的init的

refreshSelectLast();

处理的滚动到最后。于是我猜想他是在onActivityCreated中才调用的这些方法。会不会我在Activity的onactivitycreate从本地加载数据太快导致界面还没绘制完成就调用了recyclerView的滚动,于是加了个延迟进行处理。似乎达到了想要的效果。

  new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            if (mMessageList != null && !mMessageList.isEmpty())
                mMessagerecyclerview.smoothScrollToPosition(mMessageList.size() - 1);
        }
    },500);

觉得加一个500ms的延迟是不是不太好,想监听界面绘制完成,似乎只有
onWindowFocusChanged 可以达到效果。但是这个方法还是有问题。会经常被调用不仅仅在界面绘制完成。比如切换到其他activity。感觉不太好。所以暂时先用handler 做了个延迟的方式处理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,852评论 25 709
  • 半小时前我兴致勃勃打开电脑敲出影评的第一句话,三分钟后,它自动关机,而电脑线神秘地失踪了。 为此我翻遍客厅、主卧、...
    指尖上的独角兽阅读 247评论 0 0