¿Puedes usar el mismo OnClickListener para diferentes botones?

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 OnClickListener está haciendo exactamente lo mismo con la excepción de obtener el texto del botón que se hace clic. Quiero crear un OnClickListener solo, pero no puedo averiguar cómo determinar qué botón se está haciendo clic. Gracias

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 la parte diferente en negrita

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

Código 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 la recomendación de Karthik modifiqué mi código a lo 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); } }; 

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

Como de costumbre, agregue OnClickListener para todos los botones como sigue:

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

A 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 implantar el View.OnClickListener para su clase en la que su onCreate está presente de lo contrario todas las declaraciones que establecen el OnClickListener anterior será incorrecta.

  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; } } 
  • Android: Cómo crear el botón de diapositiva (encendido / apagado)
  • Botón de ondulación de androide con fondo
  • Cómo iniciar una nueva clase de actividad en el cuadro de diálogo AlertDialog eligiendo el botón Aceptar
  • Ejecutar secuencia de comandos con la aplicación de Android
  • ¿Cómo setOnclickListener () en el botón dentro de ListView?
  • Cómo deshabilitar el botón mientras AsyncTask se está ejecutando? (Androide)
  • Diferente método para establecer OnClickListener de un botón en Android
  • Cómo cambiar la imagen de fondo del botón cuando se hace clic / se centró?
  • No se puede cambiar el color del botón de radio en Android
  • Color de fondo del botón de Android
  • El botón dentro de la vista de lista crea un problema al desplazarse y al hacer clic en el botón
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.