OnClickListener () Android de plusieurs boutons

Je fais actuellement une application de calculatrice simple sur Android. Je tente de configurer le code de sorte que lorsqu'un bouton numérique est pressé, il met à jour l'écran de la calculatrice avec ce numéro. Actuellement, je suis en train de faire comme ça.

    Button one = (Button) findViewById(R.id.oneButton);
    one.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            TextView output = (TextView) findViewById(R.id.output);
            output.append("1");
        }
    });

Cela fonctionne mais j'écris ce même code pour chaque bouton de la calculatrice. Comme vous pouvez l'imaginer, il est très redondant. Y at-il de toute façon je peux écrire ce code d'une manière plus efficace? Celui qui implique de ne pas écrire cette méthode pour chaque bouton?

53
demandé sur kId 2014-09-18 09:50:41

9 réponses

Vous devez simplement suivre ces étapes pour le rendre facile...

Vous n'avez pas à écrire de nouveau onClickListener pour chaque Button... Il suffit d'implémenter View.OnClickLister à votre Activity/Fragment.. il implémentera une nouvelle méthode appelée onClick() pour gérer les événements onClick pour Button, TextView ' etc.

  1. mettre en Œuvre OnClickListener() dans votre Activity/Fragment
public class MainActivity extends Activity implements View.OnClickListener {

}
  1. implémentez la méthode onClick () dans votre activité / Fragment
public class MainActivity extends Activity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onClick(View v) {
      // default method for handling onClick Events..
    }
}
  1. Mettre En Œuvre OnClickListener() Pour Les Boutons
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.your_layout);

    Button one = (Button) findViewById(R.id.oneButton);
    one.setOnClickListener(this); // calling onClick() method
    Button two = (Button) findViewById(R.id.twoButton);
    two.setOnClickListener(this);
    Button three = (Button) findViewById(R.id.threeButton);
    three.setOnClickListener(this);

}
  1. Trouvez les boutons par Id et implémentez votre Code..
@Override
public void onClick(View v) {

    switch (v.getId()) {

        case R.id.oneButton:
            // do your code
            break;

        case R.id.twoButton:
            // do your code
            break;

        case R.id.threeButton:
            // do your code
            break;

        default:
            break;
    }

}

Veuillez vous référer à ce lien pour plus d'informations:

Https://androidacademic.blogspot.in/2016/12/multiple-buttons-onclicklistener-android.html

Cela rendra plus facile à gérer de nombreux événements de clic de boutons et le rendra simple à le gérer...

174
répondu Pragnesh Ghoda シ 2017-03-31 12:06:26

Vous pouvez définir la propriété:

android:onClick="buttonClicked"

Dans le fichier xml pour chacun de ces boutons, et utilisez ceci dans le code java:

public void buttonClicked(View view) {

    if (view.getId() == R.id.button1) {
        // button1 action
    } else if (view.getId() == R.id.button2) {
        //button2 action
    } else if (view.getId() == R.id.button3) {
        //button3 action
    }

}
38
répondu Andro 2018-04-15 20:52:48

J'ai créé une classe dédiée qui implémente View.OnClickListener.

public class ButtonClickListener implements View.OnClickListener {

    @Override
    public void onClick(View v) {
        Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show();
    }

}

Ensuite, j'ai créé une instance de cette classe dans MainActivity

private ButtonClickListener onClickBtnListener = new ButtonClickListener();

Puis définissez onClickListener pour le bouton

btn.setOnClickListener(onClickBtnListener);
7
répondu Vadim Novitskiy 2015-02-15 02:03:02

Définissez une balise sur chaque bouton sur ce que vous voulez travailler avec, dans ce cas probablement un entier. Ensuite, vous n'avez besoin que D'un OnClickListener pour tous vos boutons:

Button one = (Button) findViewById(R.id.oneButton);
Button two = (Button) findViewById(R.id.twoButton);
one.setTag(new Integer(1));
two.setTag(new Integer(2));

OnClickListener onClickListener = new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        TextView output = (TextView) findViewById(R.id.output);
        output.append(v.getTag());
    }
}

one.setOnClickListener(onClickListener);
two.setOnClickListener(onClickListener);
5
répondu Henrik Christensen 2014-09-18 07:53:37
public class MainActivity extends AppCompatActivity implements OnClickListener  {
    Button  b1,b2;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b1= (Button) findViewById(R.id.button);
        b2= (Button) findViewById(R.id.button2);
        b1.setOnClickListener(this);
        b2.setOnClickListener(this);
    }


    @Override
    public void onClick(View v)
    {
        if(v.getId()==R.id.button)
        {
            Intent intent=new Intent(getApplicationContext(),SignIn.class);
            startActivity(intent);
        }
        else if (v.getId()==R.id.button2)
        {
            Intent in=new Intent(getApplicationContext(),SignUpactivity.class);
            startActivity(in);
        }
    }
}
1
répondu Abhishek Choubey 2017-01-23 07:36:47
    you can do like this

    TextView output = (TextView) findViewById(R.id.output);
    one.setOnClickListener(youractivity.this);
    // set the onclicklistener for other buttons also

    @Override
    public void onClick(View v) {
      int id = v.getId();
    switch(id) {
    case R.id.oneButton:      
       append("1",output);
       break;
    case R.id.twoButton:
        append("2",output);
       break;
    case R.id.threeButton:
        append("3",output);
       break;
     } 
      }

 private void append(String s,TextView t){
  t.setText(s); 
}

    you can identify the views in your activity in a seperate method. 
    Hope this will help you.
0
répondu user3905781 2014-09-18 06:06:47

J'ai eu un problème similaire, et ce que j'ai fait est: Créer un tableau de boutons

Button buttons[] = new Button[10];

Ensuite, pour implémenter sur Click listener et référencer les ID xml, j'ai utilisé une boucle comme celle-ci

for (int i = 0; i < 10; i++) {      
String buttonID = "button" + i;
        int resID = getResources().getIdentifier(buttonID, "id",
                "your package name here");
        buttons[i] = (Button) findViewById(resID);
        buttons[i].setOnClickListener(this);
    }

Mais les appeler reste le même que dans le point de réponse de Prag 4. PS - si quelqu'un a une meilleure méthode pour appeler tous les onClick du bouton, veuillez faire un commentaire.

0
répondu Akshit Agarwal 2016-07-01 12:08:18

Implémentez la méthode onClick () dans votre activité / Fragment la classe publique MainActivity étend L'activité implémente la vue.OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public void onClick(View v) {

Commutateur (itemId) {

/ / Si vous appelez le fragment avec la barre de nevigation alors utilisé.

       case R.id.nav_menu1:
            fragment = new IntroductionFragment();
            break;

/ / si l'activité d'appel avec la barre de nevigation est alors utilisée.

        case R.id.nav_menu6:
            Intent i = new Intent(MainActivity.this, YoutubeActivity.class);
            startActivity(i);
  // default method for handling onClick Events..
}

}

0
répondu vicky mahale 2017-01-30 09:53:17
public void onClick(View v) {
    int id = v.getId();
    switch (id){
        case R.id.button1:
            //do ur code
            Toast.makeText(this,"This is button 1",Toast.LENGTH_SHORT).show();
            break;
        case R.id.button2:
            Intent intent = new Intent(this,SecondActivity.class);
            Intent.putExtra("key",value);
            startActivity(intent);
            break;
        case R.id.button3:
            //do ur code
            break;
        case R.id.button4:
            //do ur code;
            break;
        default:
            //do ur code;
    }
}
0
répondu Sazidur Rahman 2017-02-01 06:59:20