首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止运行for循环,直到我的onClickListener得到响应

停止运行for循环,直到我的onClickListener得到响应
EN

Stack Overflow用户
提问于 2012-09-25 09:28:14
回答 3查看 792关注 0票数 2

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

代码语言:javascript
复制
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     
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-25 09:33:09

你不需要循环。

一旦有50个响应,就退出例程:

代码语言:javascript
复制
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
        }
    }
};
票数 1
EN

Stack Overflow用户

发布于 2012-09-25 09:34:51

在我看来,理想的解决方案是使用信号量:

代码语言:javascript
复制
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线程上运行。

票数 2
EN

Stack Overflow用户

发布于 2012-09-25 09:30:50

你想做这样的事-

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12575082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档