对于循环延迟不起作用Android

时间:2015-09-18 20:24:43

标签: java android

我是android开发的新手,所以请耐心等待。我已经搜索了网站并实施了几个建议的答案,但我仍然遇到了问题。我想迭代一个对象数组并显示延迟的数组内容以允许用户交互(用户可以通过单击是或否按钮来判断显示的对象和文本是否是他们要查找的内容)。然而,我的对象首先显示,然后在看似无限循环中开始快速缩放。这是我调用加载图像的方法:

private void displayInstructions() {
    for (Emergency_Instructions instruction : instructions) {
        final Emergency_Instructions instruction2 = instruction;

        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() 
        {
        public void run() {
            displayimages(instruction2.getStep(), instruction2.getStepImage());
            handler.postDelayed(this, 5000);           
        }
    }, 5000);
}

void displayimages(String text, Bitmap image)
{
    instructiontext.setText(text);
    instructionbmp.setImageBitmap(image);
}

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

您只需要一个Handler即可创建多个Runnable。您告诉每个人将private void displayInstructions() { final Handler handler = new Handler(); int delay = 0; int step = 5000; for (Emergency_Instructions instruction : instructions) { final Emergency_Instructions instruction2 = instruction; handler.postDelayed(new Runnable() { public void run() { displayimages(instruction2.getStep(), instruction2.getStepImage()); // handler.postDelayed(this, 5000); } }, delay); delay += step; } } 发布到当前线程的消息队列,以便在相同的延迟之后运行。这个延迟几乎在所有任务的同时到期,因此它们会一个接一个地执行,就像队列一样快。这些任务中的每一个也通过处理程序发布消息,在相同的延迟之后运行。一旦延迟到期,这将产生第二组消息,一个接一个地快速发布,速度与设备一样快。

如果您只想安排有效的幻灯片放映,可以这样做:

body 
{
  font-family: -apple-system, "Helvetica Neue", "Lucida Grande";
}

请注意,每个任务的发布时间都比最后一个更长 - 这是发布的消息时的延迟,而不是显示前一个消息的时间。

话虽如此,我怀疑这是你想要做的,或者至少它是你想做的所有。就目前而言,这种方法将导致(最终)显示所有消息,而不管用户是否进行任何交互。至少,您可能希望在用户接受后续消息时取消后续消息,或者取消整体操作。