SevenViking 2014-08-04 01:46 采纳率: 0%
浏览 3115

Android中,刷新ListView中的item导致ListView闪烁的解决方法

如题,因为下载列表使用ListView实现的,所以必须实时更新ListView中的数据。
我采用的是Service+BroadcastReceiver的搭配。更新数据
在Activity里面再用notifySetDataChange()的方法对ListView进行动态刷新
但是发现一个很严重的问题。刷新的时候ListView有明显的闪烁。
求解决方法

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 10:19
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题可能是因为在更新ListView时,你的广播接收器还没有接收到通知。你可以尝试以下步骤来解决这个问题:

    1. 将更新ListView的数据放到一个线程里去处理,而不是主线程。
    2. 使用Handler或Thread来发送广播通知给其他组件,而不是直接在主线程中执行。
    3. 在主线程中创建一个新的广播接收器,然后将这个新的广播接收器注册到系统服务中,这样你就可以在主线程中使用它了。

    以下是一个示例代码:

    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.view.View;
    
    public class MyBroadcastReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            // 更新数据
            updateList();
    
            // 发送广播通知
            sendBroadcast(new Intent("my.broadcast.action"));
        }
    
        private void updateList() {
            // 在这里更新ListView的数据
            // ...
        }
    }
    
    

    在这个例子中,我们创建了一个新的广播接收器MyBroadcastReceiver,并将其注册到系统的ACTION_MY_BROADCAST服务上。当我们的程序需要更新ListView的数据时,我们可以调用sendBroadcast()方法,并传入一个包含ACTION_MY_BROADCAST动作的新Intent对象。

    注意:这个解决方案假设你的广播接收器已经在你的应用的启动类中定义好了。如果你的应用没有定义启动类,你需要手动添加一个。

    评论

报告相同问题?