2012-03-13 18 views
1

10個の質問に対する回答である10個のボタンが設定されています。特定のボタンがクリックされると、以下に示すonClickメソッドでswitch文が設定されます。私の質問は、正しいかどうかを知るために、2つの配列をonClickメソッドに渡す必要があることを見て、すべてのボタンに対してOnClickListenersを設定する最も良い方法は何ですか?また、私は整数値を返す必要があります。おかげ複数の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); 

しかし、あなたは、あなたが望むものを持っている方法の質問と「順番」を渡す必要はありません。 。

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

+0

どのようにして、整数などの情報をonClickから返すことができますか? –

+0

できません、onClickはイベントハンドラです。上記のコードでは、イベントをトリガする情報をビューから抽出しました。それを利用するのはあなたのコード次第です。 – xandy

0

あなたが好きなだけOnClickListenersを実装し、各ボタンに異なるリスナーを割り当てることができます。あなたが使用することができる技術の一つは、ビューのsetTag()方法です。

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)を使用してコードでそれらを割り当てるのではなく、使用できるショートカットがあります。そのコンテンツビューなどのonClickプロパティを、そしてそれを例えばあなたが好きな文字列を割り当て、活動に

android:onClick="clickOne" 

セットこのXML、メソッドを作成します。あなたのボタンのXMLで

、それにアンドロイドを与えますViewパラメータを使用してclickOneと命名されました。

public void clickOne(View view) 

このボタンをクリックすると、このメソッドには何も配置されません。

関連する問題