una studio poner llamar funcion diseño desde darle con como clase capturar botones boton android button clicklistener

android - studio - One OnClickHandler para múltiples botones



llamar una clase desde un boton en android studio (6)

Al obtener la respuesta de @finix, simplemente puede 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 } };

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 configurar OnClickListener?


Creo que en caso de que sus botones no estén en Activity, sino 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); }


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


Se debe notar que

android:onclick="onClick"

requiere al menos Andoid SDK 1.6. Por lo tanto, si desea que su aplicación sea accesible para la mayor audiencia posible, es probable que desee escribir su aplicación en Android 1.6. A menos que su aplicación requiera una función que solo está disponible en 1.6+. Entonces, aunque su primer intento es un poco más laborioso, tiene una mayor compatibilidad con versiones anteriores. Normalmente lo hago de la manera en que lo haces, para mantener mi Apps 1.5 comptaible.

Editar: Es fácil pasar esto por alto si configura Android 2.2 como SDK en la configuración de sus proyectos, pero configure la versión de minSDK en 3 (1.5), ya que no da errores de compilación.


Si desea hacer menos código para oyentes de clic, tiene esta lib [ http://jakewharton.github.io/butterknife/]

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


También puede configurarlo en su diseño xml usando el atributo android: onclick.

android:onClick="onClick"

Luego, en su clase de actividad, agregue el método onClick.

public void onClick(View v) { ...

Aquí está la documentation .