我需要在某些情况下延迟更新我的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 步骤中进行延迟?也许使用其他一些结构或什么是最好的方法?
答案 0 :(得分:0)
我还没试过这个,但是我猜测问题在于你的Handler是针对主线程的,而且发布到该处理程序的代码也在主线程上。
所以,你的同时'循环阻塞线程,消息在Handler队列中累积。然后,当循环退出时,将处理所有消息。
为了得到你所期望的,你可能需要运行你的'而#39;循环在后台线程上,仍然将消息发布到主线程。
有关如何执行此操作的信息,请参阅Running code in main thread from another thread。