Uno OnClickHandler per pulsanti multipli
Mi ritrovo a fare cose come questo tutto il tempo:
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); ...
e
private OnClickListener myButtonListener = new OnClickListener() { @Override public void onClick(View v) { switch(v.getId()){ case R.id.button1 : ...
C'è un modo migliore per impostare l'OnClickListener?
5 Solutions collect form web for “Uno OnClickHandler per pulsanti multipli”
Puoi anche impostarla nel tuo layout xml utilizzando l'android: onclick attributo.
android:onClick="onClick"
Quindi nella class di attività aggiungere il metodo onClick.
public void onClick(View v) { ...
Ecco la documentazione .
Fai la tua class implementare `View.OnClickListener ', come
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; ... } }
Gettin @foenix risponde, puoi semplicemente fare qualcosa di simile:
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 } };
Si dovrebbe notare che
android:onclick="onClick"
richiede alless Andoid SDK 1.6. Quindi, se vuoi che l'applicazione sia accessibile al più grande pubblico ansible, probabilmente vuoi scrivere l'applicazione contro Android 1.6. A less che la tua applicazione non richiede una funzionalità disponibile solo in 1.6+. Così mentre il primo tentativo è un po 'più di lavoro, ha una maggiore compatibilità all'indietro. Di solito faccio il tuo modo di fare, per mantenere le mie applicazioni 1.5 comptable.
Modifica: è facile trascurare questo problema se impostate Android 2.2 come SDK nelle impostazioni dei progetti, ma impostate la versione minSDK a 3 (1.5) poiché non fornisce gli errori del compilatore.
Penso che nel caso in cui i pulsanti non siano in Attività, ma in FragmentDialog ecc., Questo può aiutare
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); }