android - 异步更新ListView数据

时间:2015-08-30 01:27:38

标签: android listview asynchronous handler delay

我需要在某些情况下延迟更新我的ListView,所以我尝试使用进行。它看起来像这样:

int m=2;
    while (bigList.get(m).type !=1) {
        final int n=m;
        new Handler().postDelayed(new Runnable(){
            @Override
            public void run() {
                smallList.add(n, bigList.get(n));
                adapter.notifyDataSetChanged();
            }
        }, bigList.get(n).delay);
        m++;
    }

但它只是第一次延迟,然后立即更新,但我认为延迟将贯穿的所有步骤,而。我试图杀死/关闭/敲定(只有最后一个存在的)匿名的Runnable,但是没有效果。如何在 while 步骤中进行延迟?也许使用其他一些结构或什么是最好的方法?

1 个答案:

答案 0 :(得分:0)

我还没试过这个,但是我猜测问题在于你的Handler是针对主线程的,而且发布到该处理程序的代码也在主线程上。

所以,你的同时'循环阻塞线程,消息在Handler队列中累积。然后,当循环退出时,将处理所有消息。

为了得到你所期望的,你可能需要运行你的'而#39;循环在后台线程上,仍然将消息发布到主线程。

有关如何执行此操作的信息,请参阅Running code in main thread from another thread