如何在按下按钮之前暂停for循环?

时间:2017-04-22 06:23:45

标签: java android loops firebase

我的android应用程序中有一个循环,它从在线数据库中下载图像,即firebase数据库。我在Datasnapshot对象中获取此数据,该对象进一步用于循环以从firebase存储加载图像。循环运行得太快,我只能看到最后一张图像。我希望在单击按钮时将每个新图像加载到图像查看器中。我怎样才能做到这一点。在循环中使用循环使我的程序进入挂起状态。

3 个答案:

答案 0 :(得分:0)

可能是你可以在生产者和消费者中实现它。例如。

    Object lock = new Object();
    Button button = new Button(context);
    button.setOnClickListener(view -> {
        synchronized (lock) {
            lock.notify();
        }
    });
    for (; ; ) {
        synchronized (lock){
            try {
                lock.wait();
                //do your work here
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

答案 1 :(得分:0)

我建议你使用像Ion这样的库。它使异步加载ImagViews变得非常容易。

这是github的链接。

Ion Library

要在单击按钮时执行操作,您可以从设置为按钮的onClickListener()内请求下载。

Button button = (Button) findViewById(R.id.yourbutton);
button.setOnClickListener(new ViewOnClickListener(){
    @Override
    public void onClick(View v){
      <here you fire your download>
    }

});

答案 2 :(得分:-1)

您可以使用大小为1的信号量并在循环中获取锁定并释放按钮单击时的锁定。当然,您的图像加载必须在后台线程中。