我有一个包含在SwipeRefreshLayout中的listview。列表视图在我用新数据更新时随时呈现非常流畅。但每当我下拉SwipeRefreshLayout以获取新消息时,listview会给我一个眨眼效果,这在用户体验方面是负面的。在互联网上搜索了很多东西后,我没有发现解决这个问题的任何用处。任何人都可以教我如何解决这个问题。
以下是我的代码的一部分:
public void fetchMoreMsgs(){
sizeOfChatLV=chatLVArray.size();
if(lvPos==0){
toast = Toast.makeText(ma,"No more messages",Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER,0,0);
toast.show();
return;
}else {
if(lvPos-fetchStep>=0){
arrayList = chatLVArray.subList(lvPos-fetchStep, lvPos);
msgsList.addAll(0, arrayList);
chatLVArrayAdapter = new ChatLVArrayAdapter(ma, msgsList);
ma.chatListViewIMP2P.setAdapter(chatLVArrayAdapter);
ma.chatListViewIMP2P.setSelection(fetchStep);
lvPos-=fetchStep;
}else {
arrayList = chatLVArray.subList(0, lvPos);
msgsList.addAll(0, arrayList);
chatLVArrayAdapter = new ChatLVArrayAdapter(ma, msgsList);
ma.chatListViewIMP2P.setAdapter(chatLVArrayAdapter);
ma.chatListViewIMP2P.setSelection(lvPos);
lvPos=0;
}
}
}
当我下拉listview(包含在SwipeRefreshLayout中)时,会调用fetchMoreMsgs方法。非常感谢任何帮助!
答案 0 :(得分:2)
每当您致电setAdapter
时,它会彻底销毁ListView
中的每个视图,然后重新创建。{1}}这就是导致你眨眼效果的原因。
相反,您的chatLVArrayAdapter
应该有办法更新基础列表,然后您应该调用适配器notifyDataSetChanged()告诉ListView
数据已更改。