¿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
- Color del borde del botón de Android
- Botón de Android con Drawable - relleno
- Creación dinámica de botones y configuración onClickListener
- Android: Usar findViewById () con una cadena / en un bucle
- Cómo puedo mostrar múltiples líneas de texto en un botón
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); } };
- Cambiar entre el auricular y el altavoz al presionar el botón
- Brillante texto en el botón con fondo transparente en la disposición con otro fondo
- Cómo utilizar el método onClickListener de Button en un ListView
- Botón de diseño de material con borde
- No se puede encontrar el método onClick
- Cómo quitar la frontera / sombra de los botones de lollipop
- Crear una intención en un nuevo método
- Ajuste del radio del botón mediante programación en android
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; } }
- Cordova WebView TIMEOUT ERROR con android
- Android: cambio de identificador drawable después de modificar recursos