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 数据已更改。