2011-05-26 18 views
10

En android, ¿puedo usar el mismo OnClickListener para diferentes botones? En caso afirmativo, ¿cómo obtengo de qué botón se genera el clic? Actualmente tengo 4 botones y cada botón tiene su propio OnClickListener. Cada uno de OnClickListener está haciendo exactamente lo mismo con la excepción de hacer clic en el texto del botón. Quiero crear un solo OnClickListener pero no puedo encontrar la manera de determinar en qué botón se está haciendo clic. Gracias¿Puedes usar el mismo OnClickListener para diferentes botones?

protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     mTts = new TextToSpeech(this, new TextToSpeech.OnInitListener() { 

      @Override 
      public void onInit(int arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     setContentView(R.layout.home); 
     Button button1 = (Button)findViewById(R.id.button1); 
     Button button2 = (Button)findViewById(R.id.button2); 
     Button button3 = (Button)findViewById(R.id.button3); 
     Button button4 = (Button)findViewById(R.id.button4); 

     //Load First Word 
     button1.setOnClickListener(button1ClickListener); 
     button2.setOnClickListener(button2ClickListener); 
     button3.setOnClickListener(button3ClickListener); 
     button4.setOnClickListener(button4ClickListener); 

    } 

Código para el oyente con el las diferentes partes en negrita Código

private OnClickListener button1ClickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     **Button button = (Button)findViewById(R.id.button1);** 
     handleButtonClick(button); 
    } 
}; 

private OnClickListener button2ClickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     **Button button = (Button)findViewById(R.id.button2);** 
     handleButtonClick(button); 

    } 
}; 

private OnClickListener button3ClickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     **Button button = (Button)findViewById(R.id.button3);** 
     handleButtonClick(button); 

    } 
}; 

private OnClickListener button4ClickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     **Button button = (Button)findViewById(R.id.button4);** 
     handleButtonClick(button); 

    } 
}; 

para HandleButtonClick

private void handleButtonClick(Button button) { 
     if(button.getText().equals(currentWord)){ 
      currentScore += availableScore; 
      TextView score = (TextView)findViewById(R.id.textViewScore); 
      score.setText(String.valueOf(score)); 
      currentIndex++; 
      availableScore = 4; 
      InitializeGame(); 
     } 
     else{ 
      availableScore--; 
      button.setEnabled(false); 
     } 
    } 

Con recomendación de Karthik he modificado mi código a la siguiente:

protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     mTts = new TextToSpeech(this, new TextToSpeech.OnInitListener() { 

      @Override 
      public void onInit(int arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     setContentView(R.layout.home); 
     Button button1 = (Button)findViewById(R.id.button1); 
     Button button2 = (Button)findViewById(R.id.button2); 
     Button button3 = (Button)findViewById(R.id.button3); 
     Button button4 = (Button)findViewById(R.id.button4); 

     //Load First Word 
     button1.setOnClickListener(buttonClickListener); 
     button2.setOnClickListener(buttonClickListener); 
     button3.setOnClickListener(buttonClickListener); 
     button4.setOnClickListener(buttonClickListener); 

    } 

OnClickListenerCode

private OnClickListener buttonClickListener = new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      handleButtonClick((Button)arg0); 
     } 
    }; 

Respuesta

8

Sí es posible. He escrito un ejemplo a continuación que debería ser relativamente sencillo.

Como de costumbre, agregue el OnClickListener para todos los botones de la siguiente manera:

btn1.setOnClickListener(this); 
btn2.setOnClickListener(this); 
btn3.setOnClickListener(this); 

continuación, agregue el evento onClick() como se muestra a continuación:

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    if(v == btn1){ 
     //Things to do 
    } 
    if(v == btn2){ 
     //Things to do  
    } 
    if(v == btn3){ 
     //Things to do 
    } 
} 

Esto debería funcionar bien. No olvide implementar View.OnClickListener para su clase en la que su onCreate está presente; de ​​lo contrario, todas las declaraciones que configuran OnClickListener arriba serán incorrectas.

+0

Niza No me di cuenta de que la Vista es realmente el botón en sí. Gracias. Tuve que modificar tu código un poco, pero pude hacerlo funcionar. – atbebtg

+0

nice @atbebtg ponerse en marcha – Karthik

3
protected void onCreate(Bundle savedInstanceState) { 
      // TODO Auto-generated method stub 
      super.onCreate(savedInstanceState); 

      mTts = new TextToSpeech(this, new TextToSpeech.OnInitListener() { 

       @Override 
       public void onInit(int arg0) { 
        // TODO Auto-generated method stub 

       } 
      }); 
      setContentView(R.layout.home); 
      Button button1 = (Button)findViewById(R.id.button1); 
      Button button2 = (Button)findViewById(R.id.button2); 
      Button button3 = (Button)findViewById(R.id.button3); 
      Button button4 = (Button)findViewById(R.id.button4); 

      //Load First Word 
      button1.setOnClickListener(button1ClickListener); 
      button2.setOnClickListener(button2ClickListener); 
      button3.setOnClickListener(button3ClickListener); 
      button4.setOnClickListener(button4ClickListener); 

     } 

    @Override 
     public void onClick(View v) 

    { 

    int id = v.getId(); 
    switch (id) { 
    case R.id.button1: 
    //your code 
    break; 
case R.id.button2: 

    break; 
case R.id.button3: 

    break; 
    } 
    } 
Cuestiones relacionadas