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 做了个延迟的方式处理。

你可能感兴趣的:(RecyclerVie滚动到底部失败)