Una OnClick de Manejador de múltiples botones
-
05-10-2019 - |
Pregunta
Me encuentro haciendo cosas como esta todo el tiempo:
Button button1 = (Button) findViewById(R.id.button1);
Button button2 = (Button) findViewById(R.id.button2);
Button button3 = (Button) findViewById(R.id.button3);
button1.setOnClickListener(menuButtonListener);
button2.setOnClickListener(menuButtonListener);
button3.setOnClickListener(menuButtonListener);
...
y
private OnClickListener myButtonListener = new OnClickListener() {
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.button1 :
...
¿Hay una mejor manera de establecer el OnClickListener?
Solución
También puede configurarlo en su xml diseño utilizando el androide:. Onclick atributo
android:onClick="onClick"
A continuación, en la clase de actividad añadir el método onClick.
public void onClick(View v) {
...
Aquí está la documentación .
Otros consejos
Haga que su clase implemente `View.OnClickListener', como
public class MyActivity extends Activity implements View.OnClickListener {
Button button1, button2, button3;
@Override
public void onCreate(Bundle bundle) {
super.onCreate();
...
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button3 = (Button) findViewById(R.id.button3);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.button1:
// do stuff;
break;
case R.id.button2:
// do stuff;
break;
...
}
}
Getting @foenix respuesta, sólo tiene que hacer algo como:
int[] buttons = {R.id.button1, R.id.button2, R.id.button3, R.id.button4, R.id.button5, R.id.button6, R.id.button7
, R.id.button8, R.id.button9};
for (int i = 0; i < buttons.length; i++) {
Button buttonNum = (Button) rootView.findViewById(buttons[i]);
buttonNum.setOnClickListener(doSomething);
}
private OnClickListener doSomething= new OnClickListener() {
@Override
public void onClick(View v) {
//doSomething
}
};
Debe tenerse en cuenta, que
android:onclick="onClick"
requiere al menos Andoid SDK 1.6. Así que si usted quiere que su aplicación sea accesible a la mayor audiencia grande como sea posible, es probable que desea escribir su aplicación contra Android 1.6. A menos que su aplicación requiere una característica que sólo está disponible en 1.6+. Así, mientras que su primer intento es poco más de trabajo, que tiene mayor compatibilidad hacia atrás. Yo suelo hacer de la manera que lo hace, para mantener mi Aplicaciones 1.5 comptaible.
Editar: Es fácil pasar por alto esto, si se configura como Android 2.2 SDK en la configuración de proyectos, pero configurar la versión minSDK a 3 (1.5), ya que no da errores de compilación.
creo que en el caso, cuando los botones no están en actividad, pero en FragmentDialog, etc., esto puede ayudar
Context mContext = getActivity().getBaseContext();
mRes = mContext.getResources();
String[] idOfButtons = { "button1", "button2", "button3"};
for (int pos = 0; pos < idOfButtons.length; pos++) {
Integer btnId = mRes.getIdentifier(idOfButtons[pos], "id",(getActivity()).getBaseContext().getPackageName());
ImageButton ib = (ImageButton) v.findViewById(btnId);
ib.setOnClickListener(this.onClickNum);
}
Si usted quiere hacer menos código de clic oyentes que tiene este lib [ http: // jakewharton. github.io/butterknife/]
sólo tienes que hacer esto
@OnClick({ R.id.button1, R.id.button2, R.id.button3 })
public void doSomething(View button) {
//do whatever you want
button.changeWhateverInTheView();
}