Android: utiliser une instruction SWITCH avec setOnClickListener / onClick pour plus d'un bouton?
disons que j'ai quelques boutons dans une sortie en ligne, 2 d'entre eux sont:
mycards_button = ((Button)this.findViewById(R.id.Button_MyCards));
exit_button = ((Button)this.findViewById(R.id.Button_Exit));
- je m'inscrire setOnClickListener()
sur les deux d'entre eux:
mycards_button.setOnClickListener(this);
exit_button.setOnClickListener(this);
Comment puis-je faire un interrupteur pour différencier les deux boutons de L'Onclick ?
public void onClick(View v) {
switch(?????){
case ???:
/** Start a new Activity MyCards.java */
Intent intent = new Intent(this, MyCards.class);
this.startActivity(intent);
break;
case ???:
/** AlerDialog when click on Exit */
MyAlertDialog();
break;
}
6 réponses
Utilisation:
public void onClick(View v) {
switch(v.getId()){
case R.id.Button_MyCards: /** Start a new Activity MyCards.java */
Intent intent = new Intent(this, MyCards.class);
this.startActivity(intent);
break;
case R.id.Button_Exit: /** AlerDialog when click on Exit */
MyAlertDialog();
break;
}
}
notez que cela ne fonctionnera pas dans les projets de bibliothèque Android (en raison de http://tools.android.com/tips/non-constant-fields) où vous devrez utiliser quelque chose comme:
int id = view.getId();
if (id == R.id.Button_MyCards) {
action1();
} else if (id == R.id.Button_Exit) {
action2();
}
une autre option est d'ajouter un nouveau OnClickListener comme paramètre dans setOnClickListener () et d'annuler la méthode onClick ():
mycards_button = ((Button)this.findViewById(R.id.Button_MyCards));
exit_button = ((Button)this.findViewById(R.id.Button_Exit));
// Add onClickListener to mycards_button
mycards_button.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
// Start new activity
Intent intent = new Intent(this, MyCards.class);
this.startActivity(intent);
}
});
// Add onClickListener to exit_button
exit_button.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
// Display alertDialog
MyAlertDialog();
}
});
public class MainActivity extends Activity
implements View.OnClickListener {
private Button btnForward, btnBackword, btnPause, btnPlay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initControl();
}
private void initControl() {
btnForward = (Button) findViewById(R.id.btnForward);
btnBackword = (Button) findViewById(R.id.btnBackword);
btnPause = (Button) findViewById(R.id.btnPause);
btnPlay = (Button) findViewById(R.id.btnPlay);
btnForward.setOnClickListener(this);
btnBackword.setOnClickListener(this);
btnPause.setOnClickListener(this);
btnPlay.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnForward:
break;
case R.id.btnBackword:
break;
case R.id.btnPause:
break;
case R.id.btnPlay:
break;
}
}
}
méthode inside OnCreate: -
{
Button b = (Button)findViewById(R.id.button1);
b.setOnClickListener((View.OnClickListener)this);
b = (Button)findViewById(R.id.button2);
b.setOnClickListener((View.OnClickListener)this);
}
@Override
public void OnClick(View v){
switch(v.getId()){
case R.id.button1:
//whatever
break;
case R.id.button2:
//whatever
break;
}
et il y a encore une troisième option. Dans votre méthode onCreate (), Trouvez toutes les vues de boutons que vous avez et enregistrez-les en tant que membres de données de classe. Vous pouvez ensuite faire passer en cascade un groupe d'énoncés if-else pour trouver lequel est lequel. C'est un peu désordonné, mais c'est un must si vous ne connaissez pas L'ID des boutons (ce qui peut être compliqué si vous générez des boutons en code java).
@Override
public void onClick(View v) {
if (v == m_myCards) {
Intent intent = new Intent(this, MyCards.class);
this.startActivity(intent);
}
else if (v == m_exit) {
MyAlertDialog();
}
else if (v == m_back) {
finish();
}
une autre bonne chose à propos de cette technique est qu'elle est flexible et rapide (pas besoin de parser les IDs). Le la mauvaise chose est que vous devez garder les widgets dans la mémoire.
Ne sais pas quelle méthode est la meilleure.
je fais simple, si la mise en page est la même, je mets juste l'intention.
Mon code comme ceci:
public class RegistrationMenuActivity extends AppCompatActivity implements View.OnClickListener {
private Button btnCertificate, btnSeminarKit;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registration_menu);
initClick();
}
private void initClick() {
btnCertificate = (Button) findViewById(R.id.btn_Certificate);
btnCertificate.setOnClickListener(this);
btnSeminarKit = (Button) findViewById(R.id.btn_SeminarKit);
btnSeminarKit.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_Certificate:
break;
case R.id.btn_SeminarKit:
break;
}
Intent intent = new Intent(RegistrationMenuActivity.this, ScanQRCodeActivity.class);
startActivity(intent);
}
}