Viele Leute, die Android-Programmierung studieren, werden feststellen, dass jeder unterschiedliche Vorlieben für das Schreiben von Code hat. Das offensichtlichste ist die unterschiedliche Art, Steuerelemente zu schreiben, um auf Ereignisse zu reagieren. Daher fasst dieser Artikel diese Schreibmethoden zusammen und vergleicht die Vor- und Nachteile verschiedener Schreibmethoden. Ich hoffe, dass die flexible Auswahl der Codierungsmethoden für jeden von großem Nutzen sein kann.
Der XML-Dateicode lautet wie folgt:
<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button1" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button2" />
Die vier Methoden werden wie folgt beschrieben:
Anonyme innere Klasse:
public class TestButtonActivity extends Activity { Button btn1, btn2; Toast tst; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_button); btn1 = (Button) findViewById(R.id.button1); btn2 = (Button) findViewById(R.id.button2); btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast tst = Toast.makeText(TestButtonActivity.this, "111111111", Toast.LENGTH_SHORT); tst.show(); } }); btn2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast tst = Toast.makeText(TestButtonActivity.this, "222222222", Toast.LENGTH_SHORT); tst.show(); } }); } }
Benutzerdefiniert Click-Ereignis-Listener-Klasse:
public class TestButtonActivity extends Activity { Button btn1, btn2; Toast tst; class MyClickListener implements OnClickListener { @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.button1: tst = Toast.makeText(TestButtonActivity.this, "111111111", Toast.LENGTH_SHORT); tst.show(); break; case R.id.button2: tst = Toast.makeText(TestButtonActivity.this, "222222222", Toast.LENGTH_SHORT); tst.show(); break; default: break; } } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_button); btn1 = (Button) findViewById(R.id.button1); btn2 = (Button) findViewById(R.id.button2); btn1.setOnClickListener(new MyClickListener()); btn2.setOnClickListener(new MyClickListener()); } }
Aktivität erbt View.OnClickListener und die Aktivität implementiert die OnClick-Methode (Ansichtsansicht). In der OnClick-Methode (Ansichtsansicht) wird Switch-Case verwendet, um auf die zu reagieren Schaltflächen werden durch unterschiedliche IDs dargestellt. Verarbeitung
public class TestButtonActivity extends Activity implements OnClickListener { Button btn1, btn2; Toast tst; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_button); btn1 = (Button) findViewById(R.id.button1); btn2 = (Button) findViewById(R.id.button2); btn1.setOnClickListener(this); btn2.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.button1: tst = Toast.makeText(this, "111111111", Toast.LENGTH_SHORT); tst.show(); break; case R.id.button2: tst = Toast.makeText(this, "222222222", Toast.LENGTH_SHORT); tst.show(); break; default: break; } } }
Die letzte Methode ist eine Schreibmethode, die ich heute gesehen habe und die darin besteht, „das onClick-Attribut der angegebenen Schaltfläche in der XML-Datei anzuzeigen, sodass, wenn die Schaltfläche angezeigt wird Wenn Sie darauf klicken, wird der Klick in der entsprechenden Aktivität mithilfe der Reflection()-Methode aufgerufen Wenn Sie „android:onClick=" eingeben und Alt+/ drücken, wird keine onClick-Eingabeaufforderung angezeigt. Wenn Sie die Option „onClick“ wählen, hatte ich plötzlich das Gefühl, dass hier etwas nicht stimmt.
<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClick" android:text="Button1" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClick" android:text="Button2" />
Diese Schreibweise kann das Klickereignis realisieren der Schaltfläche, ohne die Schaltfläche im gesamten Code zu deklarieren
public class TestButtonActivity extends Activity { Button btn1, btn2; Toast tst; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_button); } // 注意 这里没有 @Override 标签 public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.button1: tst = Toast.makeText(this, "111111111", Toast.LENGTH_SHORT); tst.show(); break; case R.id.button2: tst = Toast.makeText(this, "222222222", Toast.LENGTH_SHORT); tst.show(); break; default: break; } } }