onClick und Button Methode vergleich?

  • Antworten:14
Michele
  • Forum-Beiträge: 1.525

27.05.2012, 23:01:43 via Website

Hallo alle zusammen.

Ich lerne jeden Tag kräftig :*)
Mein eigendes Programm schreibe ich auch schon.
Aber immer wieder sehe ich einige unterschiede was den Button angeht.

Einige schreiben es z.B so wenns um den Button geht:

private void ButtonListener() {
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {


}
});
}


Und andere wiederum so:

public void onButtonClick (View view) {


}

und setzen in der Layout beim Button noch die "onClick " dazu:


<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView1"
android:layout_marginTop="115dp"
android:onClick="onButtonClick"
android:text="@string/button3" />

Wo ist nun der unterschied genau was den Button/Methode angeht?
Ich verstehe das noch nicht so ganz.
Hoffe ihr versteht mich... :*)

LG

— geändert am 27.05.2012, 23:06:41

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

27.05.2012, 23:40:25 via App

Gibt keinen besonderen Unterschied.
Die Methode ohne Extra Listener soll den Code nur aufräumen.
Lg Ansgar

Antworten
Felix
  • Forum-Beiträge: 259

28.05.2012, 00:35:56 via Website

Tach!

Es gibt quasi auch noch eine dritte Methode: Man implementiert in der Activity das Interface View.OnClickListener und übergibt beim button.setOnClickListener ein this (eins das die Activity repräsentiert). Das eignet sich auch für solche Fällen bei denen die Ereignishandler mehrerer Buttons fast gleich sind und nur geringfügige Fallunterscheidungen berücksichtigt werden sollen. Oder wenn man aus welchem Grunde auch immer nur eine Methode für alles statt mehrerer einzelner Methoden haben möchten. Solche Interface gibt es auch für diverse andere Ereignisse.


Felix.

Antworten
Michele
  • Forum-Beiträge: 1.525

28.05.2012, 03:31:29 via Website

Danke euch :D

Naja habe eben nochmal bisschen getestet.

Und bei der einfachen Methode was onClick im Layout angeht, geht einiges mehr als bei der anderen Methode.

Was z.B Intent angeht :D


LG

Antworten
Felix
  • Forum-Beiträge: 259

28.05.2012, 09:34:20 via Website

Tach!

Michele K.
Und bei der einfachen Methode was onClick im Layout angeht, geht einiges mehr als bei der anderen Methode. Was z.B Intent angeht

Meiner Vermutung nach ist das eine Fehleinschätzung. Erkläre dich doch mal genauer. In allen Varianten lassen sich nach meiner Auffassung prinzipiell alle Zielstellungen realisieren.


Felix.

Antworten
Aeefire
  • Forum-Beiträge: 172

28.05.2012, 11:03:10 via Website

Das Problem mit den onClickListeners ist, dass sie oft kaum nachvollziehbar sind. Daher ist es oft empfehlenswerter bei Java zu bleiben, wenn es um event-handling geht.

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

28.05.2012, 11:22:39 via Website

Michele K.
Danke euch :D

Naja habe eben nochmal bisschen getestet.

Und bei der einfachen Methode was onClick im Layout angeht, geht einiges mehr als bei der anderen Methode.

Was z.B Intent angeht :D


LG

ich denke das ist blödsinn - beide variante machen ganz genau das gleiche. nur eben eine andere schreibweise

swordiApps Blog - Website

Antworten
Michele
  • Forum-Beiträge: 1.525

28.05.2012, 11:56:33 via Website

Hey,

ok das mag sein das es bei beiden Methoden gehen wird. Alles kenn ich leider auch noch nicht:bashful:

public void onButtonClick(View view) {
Intent intent = null;
switch (view.getId()) {
case R.id.button3:
startActivity(new Intent(this, main.class));
break;

case R.id.button4:
intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("mailto:Test@gm.com"));
startActivity(intent);
break;
}

Klappt wunderbar.

Bei der Methode geht das irgendwie dann nicht =/ wenn ich dann nur die startActivity Starten will.

private void ButtonListener() {
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {

startActivity(new Intent(this, main.class));

}
});
}



LG

— geändert am 28.05.2012, 11:57:30

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

28.05.2012, 12:37:17 via Website

ja dir fehlen einfach java grundlagen.


wo genau ist da deiner meinung nach der unterschied ?

du hast in beiden fällen die geklickte view und somit auch deren id

— geändert am 28.05.2012, 12:38:17

swordiApps Blog - Website

Antworten
Michele
  • Forum-Beiträge: 1.525

28.05.2012, 12:50:39 via Website

Womit der unterschied ist bei beiden Methoden?

Bei der einen kann ich mehrere Buttons benutzen durch das switch/case und bei der anderen Methode
kann ich halt nur ein Button benutzen da ich ihn gleich angebe in der Methode.

Ja ich bin ja auch noch Schüler oder wie ich das sagen soll :bashful:
Deswegen jede hilfe ist gut zum lernen :D


LG

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

28.05.2012, 13:38:38 via Website

du kannst deine switch anweisung bei beiden schreiben

private void ButtonListener() {
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {

switch(v.getId()) {
case R.id.buttonx:

startActivity(new Intent(this, main.class));

}
});

wo liegt genau das problem ?

swordiApps Blog - Website

Antworten
Felix
  • Forum-Beiträge: 259

28.05.2012, 14:57:13 via Website

Tach!

Michele K.
1public void onButtonClick(View view) {
2 startActivity(new Intent(this, main.class));
3}

Das this bezieht sich in dem Fall auf die Activity.

1button.setOnClickListener(new View.OnClickListener() {
2 public void onClick(View v) {
3 startActivity(new Intent(this, main.class));
4 }
5});

Damit hast du ein neues anonymes Objekt der Klasse View.OnClickListener erstellt, in dessen Code du dich befindest. Das this bezieht sich nun auf dieses Objekt und nicht mehr auf deine Activity. Wenn der Compiler erkennen soll, dass du diese meinst, musst du den Klassennamen voranstellen: ExampleActivity.this.


Felix.

Antworten
Michele
  • Forum-Beiträge: 1.525

28.05.2012, 16:17:55 via Website

Danke dir Felix :D

Weiß ich dann bescheid :D

Und Markus..wozu das so?

dachte wenn ich den button1 als Methode mache und ihn drücke dann will er auch was ausführen.
Und dann führt er ja nochmal ein button von den switch aus?
Kommt mir bisschen komisch vor deswegen.


LG

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

28.05.2012, 17:00:42 via Website

lol

du hast dieses switch ja angeführt im code, nicht ich :D

btw: was genau heißt "einen button ausführen"? denke du meinst zwar das richtige, schreibst es aber irgendwie sehr komisch hin.

wie auch immer. du weißt ja jetzt wie es geht.

die essenz aus dem thread: java lernen :D

swordiApps Blog - Website

Antworten
Michele
  • Forum-Beiträge: 1.525

28.05.2012, 17:06:18 via Website

Ich bin ja noch am lernen:P
Weiß leider auch nicht wie genau ich das sagen soll.
Ich hasse immer diese Fachwörter :D

Trotzdem danke nochmal an alle.


LG

Antworten