Je suis en train de faire une application simple calculatrice sur Android. J'essaie de configurer le code de sorte que lorsqu'un bouton de numéro est enfoncé, l'écran de la calculatrice soit mis à jour avec ce numéro. Actuellement, je le fais 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 le même code pour chaque bouton de la calculatrice. Comme vous pouvez l’imaginer, il est très redondant. Est-ce que je peux quand même écrire ce code de manière plus efficace? Celui qui implique de ne pas écrire cette méthode pour chaque bouton?
Il vous suffit simplement de suivre ces étapes pour simplifier les choses ...
Vous n'êtes pas obligé d'écrire new onClickListener
pour Every Button
... Il suffit d'implémenter View.OnClickLister
dans votre Activity
Fragment
.. ELLE IMPLÉMENTERA UNE NOUVELLE MÉTHODE APPELÉE onClick()
POUR LA GESTION DES ÉVÉNEMENTS ONCLICK POUR Button
, TEXTVIEW`, ETC.
- _/IMPLÉMENTE
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..
}
}
- Implement
OnClickListener()
For Buttons
@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);
}
- Rechercher des boutons par ID et implémenter 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 facilitera la gestion de nombreux événements de clic de boutons et simplifiera sa gestion ...
Vous pouvez définir la propriété:
Android:onClick="buttonClicked"
dans le fichier XML pour chacun de ces boutons et utilisez-le 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 étiquette sur chaque bouton en fonction de ce que vous voulez utiliser, dans ce cas probablement un entier. Ensuite, vous n'avez besoin que d'un seul 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);
}
}
}
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 mettre en œuvre sur l'écouteur de clic et référence xml id 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 4 de la réponse de Prag ... PS. Si quelqu'un a une meilleure méthode pour appeler tous les boutons du bouton, veuillez commenter.
Implémentez la méthode onClick () dans votre activité/fragment Public class MainActivity extended Activity implémente View.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 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;
}
}
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.
Je trouve que l'utilisation d'une longue chaîne if/else (ou d'un commutateur), en plus de la liste de findViewById(btn).setOnClickListener(this)
, est moche. que diriez-vous de créer de nouveaux View.OnlickListeners avec override, en ligne:
findViewById(R.id.signInButton).setOnClickListener(new View.OnClickListener()
{ @Override public void onClick(View v) { signIn(); }});
findViewById(R.id.signOutButton).setOnClickListener(new View.OnClickListener()
{ @Override public void onClick(View v) { signOut(); }});
findViewById(R.id.keyTestButton).setOnClickListener(new View.OnClickListener()
{ @Override public void onClick(View v) { decryptThisTest(); }});
findViewById(R.id.getBkTicksButton).setOnClickListener(new View.OnClickListener()
{ @Override public void onClick(View v) { getBookTickers(); }});
findViewById(R.id.getBalsButton).setOnClickListener(new View.OnClickListener()
{ @Override public void onClick(View v) { getBalances(); }});