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?
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.
- mettre en Œuvre
OnClickListener()
dans votreActivity
/Fragment
public class MainActivity extends Activity implements View.OnClickListener {
}
- 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..
}
}
- 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);
}
- 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...
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
}
}
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);
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);
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);
}
}
}
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.
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.
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..
}
}
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;
}
}