停止运行循环,直到我从onClickListener获得响应

时间:2012-09-25 01:28:14

标签: java android for-loop

我有一个for循环,但我需要它停止做任何事情,直到我收到用户的响应(也就是用户选择左或右)。我在Android中这样做,但我不确定最好的方法。 “左”和“右”是图像。因此,在继续前进之前,我正在听左或右击。我需要循环大约50次。这是我到目前为止所做的。

int testlength = 50;
for (int i = 0; i < testlength; i++) {
    left.setImageResource(R.drawable.left);
    right.setImageResource(R.drawable.right);

    //Stop the for loop and get the input from the user     
}

3 个答案:

答案 0 :(得分:2)

我认为理想的解决方案是使用信号量:

class Example {
     private Semaphore sem;

     public Example() {
         sem = new Semaphore(0);
     }

     public void onClick(...) {
          // Do stuff
          sem.release();
     }

     public void myLoop() {
         int testlength = 50;
         for (int i = 0; i < testlength; i++) {
             left.setImageResource(R.drawable.left);
             right.setImageResource(R.drawable.right);

             sem.acquire();
         }
     }
}

请记住,这假设myLoop未在UI线程上运行。

答案 1 :(得分:1)

您不需要循环。

只要有50个回复,就退出例行程序:

int count = 0;

String[] responses = new String[50];

left.setOnClickListener(new View.OnClickListener()
{
    public void onClick(View v)
    {
        left.setImageResource(R.drawable.left);
        right.setImageResource(R.drawable.right);

        responses[count] = "Left";

        count++;

        if(count == 50)
        {
            // Exit the activity
        }
    }
};

right.setOnClickListener(new View.OnClickListener()
{
    public void onClick(View v)
    {
        left.setImageResource(R.drawable.left);
        right.setImageResource(R.drawable.right);

        responses[count] = "Right";

        count++;

        if(count == 50)
        {
            // Exit the activity
        }
    }
};

答案 2 :(得分:0)

你想做这样的事情 -

ImageView img = (ImageView) findViewById(R.id.myImageId); 
img.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
       // your code here 
    } 
}); 

也就是说,您希望使用事件而不是循环等待某人点击。紧循环通常是一个讨厌的想法。

我从这个帖子中获取了代码 - how to apply click event listener to image in android