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;
}
43
demandé sur Veger 2009-10-01 18:03:26

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();
}
110
répondu Intrications 2014-11-20 12:09:38

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();
    }
});
7
répondu aspartame 2009-10-07 08:28:06
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;
        }
    }
}
5
répondu DroidVilla 2015-06-19 10:54:24

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;
}
2
répondu ayushnvijay 2015-06-06 00:59:44

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.

1
répondu Scott Biggs 2012-06-05 17:59:46

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);
    }
}
0
répondu Uray Febri 2018-07-25 04:56:44