Ich mache gerade eine einfache Taschenrechner-App für Android. Ich versuche, den Code so einzurichten, dass beim Drücken einer Zifferntaste der Taschenrechnerbildschirm mit dieser Nummer aktualisiert wird. Momentan mache ich das so.
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");
}
});
Es funktioniert, aber ich schreibe denselben Code für jede einzelne Taste auf dem Taschenrechner. Wie Sie sich vorstellen können, ist es sehr überflüssig. Kann ich diesen Code trotzdem effizienter schreiben? Eine, bei der diese Methode nicht für jede einzelne Schaltfläche geschrieben wird?
android
onclicklistener
user3011685
quelle
quelle
Antworten:
Sie müssen nur diese Schritte befolgen, um es einfach zu machen ...
Sie müssen nicht
onClickListener
für jeden neu schreibenButton
... ImplementierenView.OnClickLister
Sie einfach in IhrActivity
/Fragment
.. es wird eine neue Methode implementiert, dieonClick()
für die Behandlung von onClick-Ereignissen fürButton
, TextView` usw. aufgerufen wird.public class MainActivity extends Activity implements View.OnClickListener { }
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.. } }
@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); }
@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; } }
Weitere Informationen finden Sie unter diesem Link:
https://androidacademic.blogspot.com/2016/12/multiple-buttons-onclicklistener-android.html (aktualisiert)
Dies erleichtert die Handhabung vieler Schaltflächen-Klickereignisse und macht die Verwaltung einfach ...
quelle
view.getId()
Sie die ID der angeklickten Schaltfläche. Dies ist ein Beispiel. Sie haben einige Änderungen vorgenommen, die von Ihren Anforderungen abhängen. Prost. :)Sie können die Eigenschaft festlegen:
android:onClick="buttonClicked"
in der XML-Datei für jede dieser Schaltflächen und verwenden Sie diese im Java-Code:
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 } }
quelle
switch
funktioniert in einigen Fällen möglicherweise nicht. Hier erklärt: tools.android.com/tips/non-constant-fieldsSetzen Sie auf jeder Schaltfläche ein Tag auf das, mit dem Sie arbeiten möchten, in diesem Fall wahrscheinlich eine Ganzzahl. Dann benötigen Sie nur einen OnClickListener für alle Ihre Schaltflächen:
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);
quelle
Ich habe eine dedizierte Klasse erstellt, die View.OnClickListener implementiert.
public class ButtonClickListener implements View.OnClickListener { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show(); } }
Dann habe ich eine Instanz dieser Klasse in MainActivity erstellt
private ButtonClickListener onClickBtnListener = new ButtonClickListener();
und setzen Sie dann onClickListener für die Schaltfläche
btn.setOnClickListener(onClickBtnListener);
quelle
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); } } }
quelle
Ich hatte ein ähnliches Problem und habe Folgendes getan: Erstellen Sie eine Reihe von Schaltflächen
Button buttons[] = new Button[10];
Um dann auf Klick Listener zu implementieren und XML-IDs zu referenzieren, habe ich eine Schleife wie diese verwendet
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); }
Der Aufruf bleibt jedoch derselbe wie in Prags Antwortpunkt 4. PS: Wenn jemand eine bessere Methode hat, um alle onClick-Schaltflächen aufzurufen, kommentieren Sie dies bitte.
quelle
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; } }
quelle
Sie können dies verwenden
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); }
Sie können die Ansichten in Ihrer Aktivität in einer separaten Methode identifizieren.
quelle
Implementieren Sie die onClick () -Methode in Ihrer öffentlichen Klasse Activity / Fragment. MainActivity erweitert Activity implementiert View.OnClickListener {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onClick(View v) { switch (itemId) { // if you call the fragment with nevigation bar then used. case R.id.nav_menu1: fragment = new IntroductionFragment(); break; // if call activity with nevigation bar then used. case R.id.nav_menu6: Intent i = new Intent(MainActivity.this, YoutubeActivity.class); startActivity(i); // default method for handling onClick Events.. } }
quelle
Ich finde, dass die Verwendung einer langen if / else-Kette (oder eines Schalters) zusätzlich zur Liste von
findViewById(btn).setOnClickListener(this)
hässlich ist. Wie wäre es mit dem Erstellen neuer View.OnlickListener mit Override inline: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(); }});
quelle
Keine Notwendigkeit, wenn sonst oder wechseln. Beginnen wir: Fügen Sie in jeder Schaltfläche oder was auch immer (ich verwende ImageView) dieses Attribut hinzu
android:onClick="DoSomeThing"
In Ihrer Aktivität:
public void DoSomeThing(View v){ ImageView img1= (ImageView) v; //you have to cast the view i.e. if it's button, it must be cast to Button like below line Button b1= (Button) v; img1.setImageBitmap(imageBitmap); //or anything you want to do with your view, This will work for all b1.setText("Some Text"); }
quelle