Botones múltiples ‘OnClickListener () android

Actualmente estoy haciendo una aplicación de calculadora simple en Android. Estoy intentando configurar el código para que cuando se presione un botón numérico actualice la pantalla de la calculadora con ese número. Actualmente lo estoy haciendo así.

Button one = (Button) findViewById(R.id.oneButton); one.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { TextView output = (TextView) findViewById(R.id.output); output.append("1"); } }); 

Funciona, pero estoy escribiendo el mismo código para cada botón de la calculadora. Como se puede imaginar, es muy redundante. ¿De todos modos puedo escribir este código de una manera más eficiente? ¿Uno que implique no escribir este método para cada botón?

Simplemente tiene que seguir estos pasos para que sea más fácil …

No tiene que escribir new onClickListener para cada Button … Simplemente implemente View.OnClickLister para su Activity / Fragment … implementará un nuevo método llamado onClick() para manejar Eventos onClick para Button , TextView`, etc.

  1. Implemente OnClickListener() en su Activity / Fragment
 public class MainActivity extends Activity implements View.OnClickListener { } 
  1. Implementa el método onClick () en tu Actividad / Fragmento
 public class MainActivity extends Activity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onClick(View v) { // default method for handling onClick Events.. } } 
  1. Implementar OnClickListener() para botones
 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); Button one = (Button) findViewById(R.id.oneButton); one.setOnClickListener(this); // calling onClick() method Button two = (Button) findViewById(R.id.twoButton); two.setOnClickListener(this); Button three = (Button) findViewById(R.id.threeButton); three.setOnClickListener(this); } 
  1. Buscar botones por Id e implementar su código …
 @Override public void onClick(View v) { switch (v.getId()) { case R.id.oneButton: // do your code break; case R.id.twoButton: // do your code break; case R.id.threeButton: // do your code break; default: break; } } 

Por favor, consulte este enlace para más información:

https://androidacademic.blogspot.in/2016/12/multiple-buttons-onclicklistener-android.html

Esto facilitará el manejo de muchos botones al hacer clic en eventos y hace que parezca fácil de administrar …

Puede establecer la propiedad:

 android:onClick="buttonClicked" 

en el archivo xml para cada uno de esos botones, y utilízalo en el código java:

 public void buttonClicked(View view) { if (view.getId() == R.id.button1) { // button1 action } else if (view.getId() == R.id.button2) { //button2 action } else if (view.getId() == R.id.button3) { //button3 action } } 

Creé una clase dedicada que implementa View.OnClickListener.

 public class ButtonClickListener implements View.OnClickListener { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show(); } } 

Luego, creé una instancia de esta clase en MainActivity

 private ButtonClickListener onClickBtnListener = new ButtonClickListener(); 

y luego configure onClickListener para el botón

 btn.setOnClickListener(onClickBtnListener); 

Establezca una Etiqueta en cada botón para lo que quiera con lo que quiera trabajar, en este caso probablemente un Entero. Entonces solo necesitas un OnClickListener para todos tus botones:

 Button one = (Button) findViewById(R.id.oneButton); Button two = (Button) findViewById(R.id.twoButton); one.setTag(new Integer(1)); two.setTag(new Integer(2)); OnClickListener onClickListener = new View.OnClickListener() { @Override public void onClick(View v) { TextView output = (TextView) findViewById(R.id.output); output.append(v.getTag()); } } one.setOnClickListener(onClickListener); two.setOnClickListener(onClickListener); 
 public class MainActivity extends AppCompatActivity implements OnClickListener { Button b1,b2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b1= (Button) findViewById(R.id.button); b2= (Button) findViewById(R.id.button2); b1.setOnClickListener(this); b2.setOnClickListener(this); } @Override public void onClick(View v) { if(v.getId()==R.id.button) { Intent intent=new Intent(getApplicationContext(),SignIn.class); startActivity(intent); } else if (v.getId()==R.id.button2) { Intent in=new Intent(getApplicationContext(),SignUpactivity.class); startActivity(in); } } } 
  you can do like this TextView output = (TextView) findViewById(R.id.output); one.setOnClickListener(youractivity.this); // set the onclicklistener for other buttons also @Override public void onClick(View v) { int id = v.getId(); switch(id) { case R.id.oneButton: append("1",output); break; case R.id.twoButton: append("2",output); break; case R.id.threeButton: append("3",output); break; } } private void append(String s,TextView t){ t.setText(s); } you can identify the views in your activity in a seperate method. Hope this will help you. 

Tuve un problema similar y lo que hice fue: crear una matriz de botones

 Button buttons[] = new Button[10]; 

Luego, para implementar en click listener y hacer referencia a xml id, utilicé un bucle como este

 for (int i = 0; i < 10; i++) { String buttonID = "button" + i; int resID = getResources().getIdentifier(buttonID, "id", "your package name here"); buttons[i] = (Button) findViewById(resID); buttons[i].setOnClickListener(this); } 

Pero llamarlos sigue siendo el mismo que en el punto de respuesta 4 de Prag. PD: si alguien tiene un método mejor para activar todos los botones enHaga clic en, haga un comentario.

Implemente el método onClick () en su clase pública Activity / Fragment. MainActivity extends Implementos de actividad View.OnClickListener {

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onClick(View v) { 

cambiar (itemId) {

// si llama al fragmento con barra de nevigation y luego lo usa.

  case R.id.nav_menu1: fragment = new IntroductionFragment(); break; 

// si se usa la actividad de llamada con barra de nevigation.

  case R.id.nav_menu6: Intent i = new Intent(MainActivity.this, YoutubeActivity.class); startActivity(i); // default method for handling onClick Events.. } 

}

 public void onClick(View v) { int id = v.getId(); switch (id){ case R.id.button1: //do ur code Toast.makeText(this,"This is button 1",Toast.LENGTH_SHORT).show(); break; case R.id.button2: Intent intent = new Intent(this,SecondActivity.class); Intent.putExtra("key",value); startActivity(intent); break; case R.id.button3: //do ur code break; case R.id.button4: //do ur code; break; default: //do ur code; } }