Listener

  • 5 Antworten
  • Letztes Antwortdatum
U

uboote

Neues Mitglied
0
Hallo,

arbeitete gerade an meiner ersten Activity.

Wie kann ich jetzt unterscheiden auf welchen Button gedrückt wurde?

Danach möchte ich einen Webservice ausführen.

Code:
package com.example.test_client;

import android.os.Bundle;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class StartActivity extends Activity implements OnClickListener{
	private static final String TAG = "Login";
	Button btnRegister;
	Button btnLogin;
	EditText edEMail;
	EditText edPasswort;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		// Parst die XML-Datei res/layout/activity_start.xml
		setContentView(R.layout.activity_start);
		
		//Views aus der XML-Datei den Objekten zuweisen.
		btnRegister = (Button) findViewById(R.id.button1);
		btnLogin = (Button) findViewById(R.id.button2);
		
		edEMail = (EditText) findViewById(R.id.editText1);
		edPasswort = (EditText) findViewById(R.id.editText2);
		
		[B]btnRegister.setOnClickListener(this);
		btnLogin.setOnClickListener(this);[/B]
		
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.start, menu);
		return true;
	}
	
	// ActionListener wird aufgerufen, wenn auf den Button geklickt wird.
	public void onClick(View v) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void onClick(DialogInterface arg0, int arg1) {
		// TODO Auto-generated method stub
		
	}
 
Du hast doch die View in der Methode, diese View ist der Button der gedrückt wird.
Ich würde mit getId mir die Id holen und dann in einem switch dahin gehen wo du den code für diesen button implementierst.
Beispiel
Code:
switch(v.getId()){

case R.id.button1:
//button code
break;
case R.id.button2:
//button2 code
break;
}

So in etwa zumindest
 
Da ich den Code lieber in einer "flüssigen" Leseform vor mir habe, schreibe ich die von Amfa eingestellte Abfrage mal in zwei if-Anweisungen um.
Aus meiner zwar ebenfalls geringen Erfahrung weiß ich aber, dass Switch-Anweisungen besonders für Anfänger recht unübersichtlich aussehen und länger zum Verständnis benötigen. Da fallen if-Anweisungen deutlich leichter.

public void onClick(View v) {

if ( v.getId() == R.id.button1 )
{
// Code für button1
}

if ( v.getId() == R.id.button2 )
{
// Code für button2
}
}


Gruß Christian
 
Wenn wir's genau nehmen wären dann aber else-if Konstrukte die bessere Wahl.
Sonst überprüft der ja trotzdem jedes mal ob v.getId() = ... ist auch wenn er das erste schon gefunden hat ;)

Das dürfte nicht soooooo viel performance schlucken aber immerhin, es sei denn ich hab 2 Millionen Buttons.. aber dann hab ich sowieso ganz andere Probleme :D
 
Ja stimmt. Danke für den Hinweis!
 
Und was mir noch einfällt, wenn wir extrem auf Performance aus sind, müsste man noch überlegen, weclher Button am häufigsten geklickt wird und eine Reihenfolge anlegen und die Reihenfolge auch genauso prüfen ;)

Aber das geht schon sehr weit in die Theorie und hat vermutlich keine praktischen auswirkungen ;)
 
Zurück
Oben Unten