2012-03-13 49 views
1

我有10個按鈕設置哪些是十個問題的答案。當點擊某個按鈕時,我在下面顯示的onClick方法中設置了一個switch語句。我的問題是什麼是爲所有按鈕設置OnClickListeners的最佳方式,因爲我需要將2個數組傳遞給onClick方法以便判斷它是否正確?另外,我需要返回和整數值。由於多個OnClickListeners Android

public void onClick(View v, int[] qaarray, int questionorder) { 
      int x=0; 
      switch(v.getId()) 
      { 
      case R.id.imageButton0: 
       if(qaarray[0] == questionorder){ 
        //correct 
       }else{ 
        //incorrect 
       } 
      break; 
      case R.id.imageButton1: 
       if(qaarray[1] == questionorder){ 
        // correct 
       }else{ 
        //incorrect 
       } 
      break; 
      case R.id.imageButton2: 
       if(qaarray[2] == questionorder){ 
        // correct 
       }else{ 
        //incorrect 
       } 
      break; 
      case R.id.imageButton3: 
       if(qaarray[3] == questionorder){ 
        // correct 
       }else{ 
        //incorrect 
       } 
      break; 
      case R.id.imageButton4: 
       if(qaarray[4] == questionorder){ 
        //correct 
       }else{ 
        //incorrect 
       } 
      break; 
      case R.id.imageButton5: 
       if(qaarray[5] == questionorder){ 
        //correct 
       }else{ 
        //incorrect 
       } 
      break; 
      case R.id.imageButton6: 
       if(qaarray[6] == questionorder){ 
        //correct 
       }else{ 
        //incorrect 
       } 
      break; 
      case R.id.imageButton7: 
       if(qaarray[7] == questionorder){ 
        //correct 
       }else{ 
        //incorrect 
       } 
      break; 
      case R.id.imageButton8: 
       if(qaarray[8] == questionorder){ 
        //correct 
       }else{ 
        //incorrect 
       } 
      break; 
      case R.id.imageButton9: 
       if(qaarray[9] == questionorder){ 
        //correct 
       }else{ 
        //incorrect 
       } 
      break; 
      default: 
      throw new RuntimeException("Unknown button ID"); 
      } 
     } 

回答

1

OnClickListener只給你一個參數,也就是查看:

void onClick(View v); 

但是你沒有通過的問題和「秩序」的方法有你想要什麼。一,你可以使用該技術的是觀的setTag()方法:

int[] button = new int[] { R.id.imageButton1, R.id.imageButton2.... }; 

private class AnswerPair{ 
    public int questionOrder; 
    public int answer; 
} 

public void onCreate(Bundle bundle){ 
    for(int i=0; i<NO_OF_BUTTON; i++){ 
     AnswerPair ans = new AnswerPair(); 
     ans.questionOrder = i; 
     ans.answer = 0; // SET this 
     getViewById(button[i]).setTag(ans); 
     getViewById(button[i]).setOnClickListener(this); 
    } 
} 

public void onClick(View v){ 
    if (v.getTag() == null) return; 

    try{ 
     AnswerPair answer = (ans)v.getTag(); 
     // Check answer == question order? index? 

    }catch(exception e) return; 
} 
+0

setTag()方法很少使用,但在這種情況下非常有用!作爲xandy答案的補充,您還可以使用android:click屬性直接在XML佈局中設置onClickListeners。 – zrgiu 2012-03-13 02:15:35

+0

如何從onClick返回信息,例如整數? – 2012-03-13 02:21:39

+0

不能,onClick是一個事件處理程序。在上面的代碼中,我們從視圖中提取了觸發事件的信息。取決於你的代碼來使用它。 – xandy 2012-03-13 02:53:43

0

,只要你想,您可以實現許多OnClickListeners併爲每個按鈕分配不同的聽衆。

public void onCreate(Bundle bundle){ 
    setContentView(R.layout.main); 
    Button b = (Button) findViewById(R.id.myButton) 
    b.setOnClickListener(new MyListener()); 
} 

private class MyListener implements OnClickListener { 
    @Override 
    public void onClick(View v) { 
     // Your code here 
    } 
} 
0

我想很多人都知道這個了,但是有可以使用,而不必onClickListeners的不同實例,並使用setOnClickListener(x)的代碼中賦予它們的快捷方式。

在按鈕XML,給它的Android版本:單擊屬性,併爲其分配一個你喜歡的字符串,例如,

android:onClick="clickOne" 

在活動中設置此XML作爲它的內容視圖中創建一個方法用一個View參數命名爲clickOne

public void clickOne(View view) 

無論你放在這個方法上,當你點擊按鈕時都會執行。