因?yàn)橛玫搅谁h(huán)信的即時(shí)通訊诀豁。界面呢都是自己寫的。到后面發(fā)現(xiàn)一個(gè)問題,每次進(jìn)入聊天的Activity會(huì)從本地加載聊天記錄攒驰,案后調(diào)用Adapter的notifyDataSetChanged()疫粥,然后調(diào)用
mMessagerecyclerview.smoothScrollToPosition(mMessageList.size() - 1);
以為就能順利滾動(dòng)到底部去茬斧,但是事實(shí)卻并不是,他確實(shí)有滾動(dòng)梗逮,然而只是滾動(dòng)到大概倒數(shù)第三左右的位置项秉,消息當(dāng)時(shí)大概十條多一點(diǎn)。后邊去看了一下環(huán)信官方的Demo慷彤。他的讀取消息滾動(dòng)時(shí)放到Fragment的娄蔼,在EaseBaseFragment的onActivityCreated里面調(diào)用setupView方法調(diào)用onMessageListInit再調(diào)用EaseChatMessageList的init的
refreshSelectLast();
處理的滾動(dòng)到最后。于是我猜想他是在onActivityCreated中才調(diào)用的這些方法底哗。會(huì)不會(huì)我在Activity的onactivitycreate從本地加載數(shù)據(jù)太快導(dǎo)致界面還沒繪制完成就調(diào)用了recyclerView的滾動(dòng)岁诉,于是加了個(gè)延遲進(jìn)行處理。似乎達(dá)到了想要的效果跋选。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (mMessageList != null && !mMessageList.isEmpty())
mMessagerecyclerview.smoothScrollToPosition(mMessageList.size() - 1);
}
},500);
覺得加一個(gè)500ms的延遲是不是不太好涕癣,想監(jiān)聽界面繪制完成,似乎只有
onWindowFocusChanged 可以達(dá)到效果野建。但是這個(gè)方法還是有問題属划。會(huì)經(jīng)常被調(diào)用不僅僅在界面繪制完成恬叹。比如切換到其他activity。感覺不太好同眯。所以暫時(shí)先用handler 做了個(gè)延遲的方式處理绽昼。