with studio programacion móviles dinamico desarrollo curso con botones aplicaciones android onclicklistener

studio - listview with button android



Múltiples botones ''OnClickListener() android (10)

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

Actualmente estoy haciendo una aplicación de calculadora simple en Android. Estoy tratando de configurar el código para que cuando se presiona un botón numérico se 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 este mismo código para cada botón de la calculadora. Como puedes imaginar, es muy redundante. ¿Hay alguna forma de escribir este código de una manera más eficiente? ¿Uno que implica no escribir este método para cada botón?


Establezca una etiqueta en cada botón con lo que quiera trabajar, en este caso probablemente un número entero. Entonces solo necesita un OnClickListener para todos sus 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);


Implemente el método onClick () en su clase pública de actividad / fragmento MainActivity extiende la actividad implementa View.OnClickListener {

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

interruptor (itemId) {

// si llamas al fragmento con la barra de nevigación, entonces lo usas.

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

// si la actividad de la llamada con la barra de navegación se usa.

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

}


Me parece que usar una larga cadena if / else (o interruptor), además de la lista de findViewById(btn).setOnClickListener(this) es feo. ¿qué tal crear nuevas View.OnlickListeners con anulación, en línea:

findViewById(R.id.signInButton).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { signIn(); }}); findViewById(R.id.signOutButton).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { signOut(); }}); findViewById(R.id.keyTestButton).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { decryptThisTest(); }}); findViewById(R.id.getBkTicksButton).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getBookTickers(); }}); findViewById(R.id.getBalsButton).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getBalances(); }});


Puede establecer la propiedad:

android:onClick="buttonClicked"

en el archivo xml para cada uno de esos botones, y use esto en el código de 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 } }


Puedes usar esto

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

Puede identificar las vistas en su actividad en un método separado.


Simplemente tiene que seguir estos pasos para facilitarlo ...

No tiene que escribir un nuevo onClickListener para cada Button ... Simplemente implemente View.OnClickLister en 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. Implemente el método onClick () en su 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. Encuentra botones por ID e implementa tu 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; } }

Consulte este enlace para obtener más información:

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

Esto facilitará el manejo de muchos eventos de clic de botones y hará que parezca simple administrarlo ...


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

Button buttons[] = new Button[10];

Luego, para implementar el oyente de clics y los id de xml de referencia, 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 llamar a todos los botones en Click, haga un comentario.


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


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