Je me retrouve à faire des choses comme ça tout le temps:
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);
...
et
private OnClickListener myButtonListener = new OnClickListener() {
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.button1 :
...
Existe-t-il un meilleur moyen de définir OnClickListener?
Vous pouvez également le définir dans votre mise en page XML à l'aide de l'attribut Android: onclick.
Android:onClick="onClick"
Ajoutez ensuite la méthode onClick dans votre classe d’activité.
public void onClick(View v) {
...
Voici la documentation .
Demandez à votre classe d'implémenter View.OnClickListener, comme
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, vous pouvez simplement faire quelque chose comme:
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
}
};
Il convient de noter que
Android:onclick="onClick"
nécessite au moins Andoid SDK 1.6. Donc, si vous voulez que votre application soit accessible au plus grand public possible, vous voudrez probablement l'écrire contre Android 1.6. Sauf si votre application nécessite une fonctionnalité uniquement disponible dans la version 1.6+. Ainsi, bien que votre première tentative consomme un peu plus de travail, elle offre une compatibilité ascendante plus grande. Je le fais habituellement comme vous le faites, pour maintenir la compatibilité de mon logiciel Apps 1.5.
Il est facile d’ignorer cela, si vous configurez Android 2.2 comme SDK dans les paramètres de votre projet, mais réglez la version de minSDK sur 3 (1.5), car cela ne génère pas d’erreurs de compilation.
Je pense que dans le cas où vos boutons ne sont pas dans Activité mais dans FragmentDialog, etc., cela peut aider
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 vous voulez faire moins de code pour les écouteurs de clic, vous avez cette lib [ http://jakewharton.github.io/butterknife/]
tu dois juste faire ça
@OnClick({ R.id.button1, R.id.button2, R.id.button3 })
public void doSomething(View button) {
//do whatever you want
button.changeWhateverInTheView();
}