studio setonclicklistener programacion móviles desarrollo curso aplicaciones android button listener

setonclicklistener - set onclick button android



Android: ¿usa una instrucción SWITCH con setOnClickListener/onClick para más de 1 botón? (6)

Digamos que tengo algunos botones en LinearLayout, 2 de ellos son:

mycards_button = ((Button)this.findViewById(R.id.Button_MyCards)); exit_button = ((Button)this.findViewById(R.id.Button_Exit));

setOnClickListener() en ambos:

mycards_button.setOnClickListener(this); exit_button.setOnClickListener(this);

¿Cómo hago un INTERRUPTOR para diferenciar entre los dos botones dentro de Onclick?

public void onClick(View v) { switch(?????){ case ???: /** Start a new Activity MyCards.java */ Intent intent = new Intent(this, MyCards.class); this.startActivity(intent); break; case ???: /** AlerDialog when click on Exit */ MyAlertDialog(); break; }


Lo hago simple, si el diseño es el mismo, simplemente lo intento.

Mi código como este:

public class RegistrationMenuActivity extends AppCompatActivity implements View.OnClickListener { private Button btnCertificate, btnSeminarKit; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_registration_menu); initClick(); } private void initClick() { btnCertificate = (Button) findViewById(R.id.btn_Certificate); btnCertificate.setOnClickListener(this); btnSeminarKit = (Button) findViewById(R.id.btn_SeminarKit); btnSeminarKit.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.btn_Certificate: break; case R.id.btn_SeminarKit: break; } Intent intent = new Intent(RegistrationMenuActivity.this, ScanQRCodeActivity.class); startActivity(intent); } }


Otra opción es agregar un nuevo OnClickListener como parámetro en setOnClickListener () y anular el método onClick ():

mycards_button = ((Button)this.findViewById(R.id.Button_MyCards)); exit_button = ((Button)this.findViewById(R.id.Button_Exit)); // Add onClickListener to mycards_button mycards_button.setOnClickListener(new OnClickListener() { public void onClick(View view) { // Start new activity Intent intent = new Intent(this, MyCards.class); this.startActivity(intent); } }); // Add onClickListener to exit_button exit_button.setOnClickListener(new OnClickListener() { public void onClick(View view) { // Display alertDialog MyAlertDialog(); } });


Utilizar:

public void onClick(View v) { switch(v.getId()){ case R.id.Button_MyCards: /** Start a new Activity MyCards.java */ Intent intent = new Intent(this, MyCards.class); this.startActivity(intent); break; case R.id.Button_Exit: /** AlerDialog when click on Exit */ MyAlertDialog(); break; } }

Tenga en cuenta que esto no funcionará en los proyectos de la biblioteca de Android (debido a http://tools.android.com/tips/non-constant-fields ) donde tendrá que usar algo como:

int id = view.getId(); if (id == R.id.Button_MyCards) { action1(); } else if (id == R.id.Button_Exit) { action2(); }


Y todavía hay una tercera opción. En su método onCreate (), encuentre todas las vistas de botón que tenga y guárdelas como miembros de datos de clase. Luego puede conectar en cascada un grupo de declaraciones if-else para encontrar cuál es cuál. Es un poco desordenado, pero es imprescindible si no conoces la ID de los botones (lo cual puede ser complicado si estás generando botones en código java).

@Override public void onClick(View v) { if (v == m_myCards) { Intent intent = new Intent(this, MyCards.class); this.startActivity(intent); } else if (v == m_exit) { MyAlertDialog(); } else if (v == m_back) { finish(); }

Otra cosa agradable de esta técnica es que es flexible y rápida (sin tener que analizar las identificaciones). Lo malo es que debes mantener los widgets en la memoria.

No sé qué método es mejor.


dentro del método OnCreate: -

{ Button b = (Button)findViewById(R.id.button1); b.setOnClickListener((View.OnClickListener)this); b = (Button)findViewById(R.id.button2); b.setOnClickListener((View.OnClickListener)this); } @Override public void OnClick(View v){ switch(v.getId()){ case R.id.button1: //whatever break; case R.id.button2: //whatever break; }


public class MainActivity extends Activity implements View.OnClickListener { private Button btnForward, btnBackword, btnPause, btnPlay; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initControl(); } private void initControl() { btnForward = (Button) findViewById(R.id.btnForward); btnBackword = (Button) findViewById(R.id.btnBackword); btnPause = (Button) findViewById(R.id.btnPause); btnPlay = (Button) findViewById(R.id.btnPlay); btnForward.setOnClickListener(this); btnBackword.setOnClickListener(this); btnPause.setOnClickListener(this); btnPlay.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnForward: break; case R.id.btnBackword: break; case R.id.btnPause: break; case R.id.btnPlay: break; } } }