working studio setonclicklistener que not new example buttons android button design-patterns onclicklistener

android - studio - setonclicklistener kotlin



Botón Android setOnClickListener Design (9)

Como setOnClickListener está definido en View no Button , si no necesita la variable para otra cosa, puede hacer que sea un poco más raro así:

findViewById(R.id.buttonXName).setOnClickListener(new OnClickListener() { public void onClick(View v) { //DO SOMETHING! {RUN SOME FUNCTION ... DO CHECKS... ETC} } });

Estoy construyendo una aplicación para Android. Me he dado cuenta de que estoy creando muchas repeticiones de código similares a esto en cada una de mis clases:

Button buttonX = (Button)findViewById(R.id.buttonXName); // Register the onClick listener with the implementation above buttonX.setOnClickListener(new OnClickListener() { public void onClick(View v) { //DO SOMETHING! {RUN SOME FUNCTION ... DO CHECKS... ETC} } });

Ahora tengo quince botones y esto está haciendo que mi código sea feo. ¿Alguien tiene una clase o algunos ejemplos sobre cómo puedo convertir todos estos códigos en algo más eficiente, por lo que puedo:

  1. Crear el objeto del botón {Button buttonX (Button)findViewById(R.id.buttonXName);}
  2. Configure el oyente {buttonX.setOnClickListener(new OnClickListener()}
  3. Determine si se hizo clic en {public void onClick(View v)}
  4. ¿Luego ejecuta un código específico para cada botón?

Si alguien sabe algo, lo agradecería.


Creo que normalmente puede hacer lo que necesita en un ciclo, que es mucho mejor que muchos métodos onClick si se puede hacer.

Vea esta respuesta para una demostración de cómo usar un ciclo para un problema similar. La forma en que construyas tu ciclo dependerá de las necesidades de tus funciones onClick y de cuán similares sean entre sí. El resultado final es un código mucho menos repetitivo que es más fácil de mantener.


Implementar la actividad con View.OnClickListener como a continuación.

public class MyActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_scan_options); Button button = findViewById(R.id.button); Button button2 = findViewById(R.id.button2); button.setOnClickListener(this); button2.setOnClickListener(this); } @Override public void onClick(View view) { int id = view.getId(); switch (id) { case R.id.button: // Write your code here first button break; case R.id.button2: // Write your code here for second button break; } } }


Implemente OnClickListener () en su Actividad ...

public class MyActivity extends Activity implements View.OnClickListener { }

Para cada botón, use ...

buttonX.setOnClickListener(this);

En su método Activity onClick () prueba para qué botón es ...

@Override public void onClick(View view) { if (View.equals(buttonX)) // Do something }

También en onClick puede usar view.getId () para obtener el ID del recurso y luego usarlo en un interruptor / bloque de caja para identificar cada botón y realizar la acción relevante.


Puede usar la matriz para manejar varios botones haga clic en oyente en Android de esta manera: aquí estoy configurando el botón clic en el oyente para n botones usando una matriz como:

Button btn[] = new Button[n];

NOTA: n es un entero positivo constante

Ejemplo de código:

//class androidMultipleButtonActions package a.b.c.app; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class androidMultipleButtonActions extends Activity implements OnClickListener{ Button btn[] = new Button[3]; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btn[0] = (Button) findViewById(R.id.Button1); btn[1] = (Button) findViewById(R.id.Button2); btn[2] = (Button) findViewById(R.id.Button3); for(int i=0; i<3; i++){ btn[i].setOnClickListener(this); } } public void onClick(View v) { if(v == findViewById(R.id.Button1)){ //do here what u wanna do. } else if(v == findViewById(R.id.Button2)){ //do here what u wanna do. } else if(v == findViewById(R.id.Button3)){ //do here what u wanna do. } } }

Nota: Primero escriba un archivo main.xml si no sabe cómo escribir, envíe un correo electrónico a: [email protected]


Si tiene como objetivo 1.6 o posterior, puede usar el atributo android: onClick xml para eliminar parte del código repetitivo. Mira esta publicación de blog de Romain Guy.

<Button android:height="wrap_content" android:width="wrap_content" android:onClick="myClickHandler" />

Y en la clase de Java, use estas líneas de código a continuación:

class MyActivity extends Activity { public void myClickHandler(View target) { // Do stuff } }


Una mejor solución funcionará con una caja de conmutación como esta:

public void registerButtons(){ register(R.id.buttonName1); register(R.id.buttonName2); register(R.id.buttonName3); } private void register(int buttonResourceId){ findViewById(buttonResourceId).setOnClickListener(buttonClickListener); } private OnClickListener buttonClickListener = new OnClickListener() { @Override public void onClick(View v){ switch (v.getId()) { case R.id.buttonName1: // TODO Auto-generated method stub break; case R.id.buttonName2: // TODO Auto-generated method stub break; case View.NO_ID: default: // TODO Auto-generated method stub break; } } };


public class MainActivity extends AppCompatActivity implements View.OnClickListener{ Button b1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b1=(Button)findViewById(R.id.button); b1.setOnClickListener(this); } @Override public void onClick(View v) { Toast.makeText(getApplicationContext(),"Button is Working",Toast.LENGTH_LONG).show(); } }


public class MyActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_scan_options); Button button = findViewById(R.id.button); Button button2 = findViewById(R.id.button2); button.setOnClickListener(this); button2.setOnClickListener(this); } @Override public void onClick(View view) { int id = view.getId(); switch (id) { case R.id.button: // Write your code here first button break; case R.id.button2: // Write your code here for second button break; } } }