【发布时间】:2015-08-26 14:51:31
【问题描述】:
我有一个 listView,如代码所示,我添加了从 0 到 9 的 10 个值。但我想做的是添加“i”的第一个值,然后等待 2 秒, 然后将“i”的下一个值添加到列表中。
我尝试使用以下代码执行此操作,但在运行时,应用程序等待 20 秒“2 秒/迭代”,然后一次显示所有值,这是我不想要的。 我希望 for 循环中的每次迭代都被添加到 listView 并在其中看到,然后应用程序应该等待 2 秒,然后在 循环到列表等等!
请指导我如何做到这一点?
代码:
btn_Start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
for (int i = 0; i < 10; i++) {
adapter.add(""+i);
adapter.notifyDataSetChanged();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
【问题讨论】:
-
你不应该阻塞你的主线程(Thread.Sleep),而是使用 Handler 或 AsyncTask。
-
@UdiI 很好,但我使用 adapter.notifyDataSetChanged();它应该显示列表视图中数据集发生的变化
-
您在使用 adapter.notifyDataSetChanged() 后立即阻塞了 UI 线程;你不应该那样做。
-
使用处理程序来更改 UI,将主线程置于睡眠状态会冻结 UI,这不是一个好习惯。处理程序在这里解释了最好的方法youtube.com/watch?v=LJ_pUlWzGsc。
标签: android multithreading listview