2

我有一个 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     
}
4

3 回答 3

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 线程上运行。

于 2012-09-25T01:34:51.013 回答
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
        }
    }
};
于 2012-09-25T01:33:08.627 回答
0

你想做这样的事情 -

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

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

我从这个线程得到了代码 -如何将点击事件侦听器应用于 android 中的图像

于 2012-09-25T01:30:50.420 回答