Android SwipeRefreshLayout 刷新列表视图闪烁
Android SwipeRefreshLayout refresh listview with blinks
我有一个包含在 SwipeRefreshLayout 中的列表视图。每当我用新数据更新它时,listview 的渲染都非常流畅。但是每当我下拉 SwipeRefreshLayout 以获取新消息时,列表视图都会给我一个闪烁效果,这在用户体验方面是负面的。在 internet.Can 上搜索了很多之后,我发现没有任何有用的方法来解决这个问题。有人教我如何解决这个问题。
下面是我的部分代码:
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;
}
}
}
当我下拉列表视图(包装在 SwipeRefreshLayout 中)时调用 fetchMoreMsgs 方法。非常感谢任何帮助!
无论何时调用 setAdapter
,它都会完全销毁 ListView
中的每个视图,然后重新创建它。这就是导致你闪烁效果的原因。
相反,您的 chatLVArrayAdapter
应该有一种方法来更新基础列表,然后您应该调用适配器的 notifyDataSetChanged() 来告诉 ListView
数据已更改。
我有一个包含在 SwipeRefreshLayout 中的列表视图。每当我用新数据更新它时,listview 的渲染都非常流畅。但是每当我下拉 SwipeRefreshLayout 以获取新消息时,列表视图都会给我一个闪烁效果,这在用户体验方面是负面的。在 internet.Can 上搜索了很多之后,我发现没有任何有用的方法来解决这个问题。有人教我如何解决这个问题。
下面是我的部分代码:
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;
}
}
}
当我下拉列表视图(包装在 SwipeRefreshLayout 中)时调用 fetchMoreMsgs 方法。非常感谢任何帮助!
无论何时调用 setAdapter
,它都会完全销毁 ListView
中的每个视图,然后重新创建它。这就是导致你闪烁效果的原因。
相反,您的 chatLVArrayAdapter
应该有一种方法来更新基础列表,然后您应该调用适配器的 notifyDataSetChanged() 来告诉 ListView
数据已更改。