2012-09-25 63 views
2

我有一個for循環,但我需要它停止做任何事情,直到我得到用戶的響應(也就是用戶選擇左側或右側)。我在Android中這樣做,但我不確定最好的方式去做這件事。 「左」和「右」是圖像。因此,在繼續前進之前,我正在傾聽左側或右側的聲音。我需要循環約50次。這是我迄今爲止所擁有的。停止運行for循環,直到我得到我的onClickListener響應

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  
} 

回答

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 
     } 
    } 
}; 
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

+0

那麼,如果我想運行該代碼50次呢? – EGHDK

+0

你爲什麼要運行50次?我認爲你只是使用循環來等待點擊 –

+0

好吧,我現在明白了一點,雖然這看起來很奇怪。所以你想要用戶點擊屏幕50次?你究竟在努力完成什麼? –

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線程上。

+0

嗯...人們同意你的看法,但我將不得不閱讀信號量。我很欣賞答案。 – EGHDK

+0

信號量是一個相對簡單的概念。它們就像互斥鎖一樣,但它們是可數的。所以當你釋放一個信號量時你增加了它的內部計數器,當你獲得一個信號量時,你減少計數器。當你嘗試獲取信號量並且計數器爲零時,就會發生奇蹟。在這種情況下,獲取線程將阻塞並等待另一個線程釋放信號量。這樣,計數器永遠不會小於零,當它爲零時,它確保任何其他嘗試獲取它的線程只會在另一個線程增加計數器後繼續。 –