Android SwipeRefreshLayout刷新列表视图,闪烁

时间:2017-03-29 20:13:16

标签: android listview swiperefreshlayout

我有一个包含在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方法。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

每当您致电setAdapter时,它会彻底销毁ListView中的每个视图,然后重新创建。{1}}这就是导致你眨眼效果的原因。

相反,您的chatLVArrayAdapter应该有办法更新基础列表,然后您应该调用适配器notifyDataSetChanged()告诉ListView数据已更改。