# OnClickListener für mehrere Buttons



## penta (28. Feb 2011)

Heyho,

ich arbeite gerade mit dem Android SDK, meine Frage bezieht sich jedoch nur auf den Java Background, daher stelle ich die Frage mal in diesem Forum =)

Kurz und Knapp, ich habe mehrere Buttons und möchte das die alle einem OnClickListener zugeordnet werden, hierzu habe ich folgenden Code programmiert:


```
final Button mainButton1 = (Button)findViewById(R.id.mainButton1);
        final Button mainButton2 = (Button)findViewById(R.id.mainButton2);
        final Button mainButton3 = (Button)findViewById(R.id.mainButton3);
        
        OnClickListener onC = new OnClickListener()
        {
        	public void onClick(View v)
        	{
        		Intent intent;
        		switch (v.getId())
        		{
        		case R.id.mainButton1: intent = new Intent(main.this, func1.class);
        		case R.id.mainButton2: intent = new Intent(main.this, func2.class);
        		case R.id.mainButton3: intent = new Intent(main.this, func3.class);
        		default: intent = new Intent (main.this, main.class);
        		}
        		startActivity(intent);
        	}
        };
        
        mainButton1.setOnClickListener(onC);
        mainButton2.setOnClickListener(onC);
        mainButton3.setOnClickListener(onC);
```


Leider springt das Programm aber bei jedem Button nur in den default Abschnitt meiner Switch Anweisung... was mache ich falsch?


Außerdem habe ich noch eine allgemeine Frage:

Folgendes Code Kontrukt von oben verstehe ich iwie nich ganz:


```
OnClickListener onC = new OnClickListener()
        {
        	public void onClick(View v)
        	{
        		Intent intent;
        		switch (v.getId())
        		{
        		case R.id.mainButton1: intent = new Intent(main.this, func1.class);
        		case R.id.mainButton2: intent = new Intent(main.this, func2.class);
        		case R.id.mainButton3: intent = new Intent(main.this, func3.class);
        		default: intent = new Intent (main.this, main.class);
        		}
        		startActivity(intent);
        	}
        };
```

Was passiert hier genau? Ich erzeuge ja ein neues Objekt "OnClickListener" und überschreibe dann iwie eine Methode darin oder wie? Die Syntax verwirrt mich grade sehr.


Vielen Dank für eure Hilfe!! =)
Gruß Penta


----------



## Java123??? (28. Feb 2011)

Zu dem switch-case:
Wenn eine Bedingung zutrifft arbeitet er auch alle folgenden Bedingungen bis zu einem break durch. Er macht also nicht nur default, sondern alle. Da er default aber als letztes macht steht da halt immer "new Intent (main.this, main.class);" drin.
Zu dem nächsten:
Das hast du schon richtig verstanden du erstellt den Listener und überschreibst die Methode "onClick".
Mfg


----------



## DerEisteeTrinker (28. Feb 2011)

Sprich wenn die ID des Views "R.id.mainButton2" entspricht, dann führt er folgende Schritte aus


intent = new Intent(main.this, func2.class);
intent = new Intent(main.this, func3.class);
intent = new Intent (main.this, main.class);

Da du mit dem switch-case immer wieder die Instanz überschreibst, wirst du nur den letzten Aufruf sehen. So wie ich das switch-case sehe, sollte:


```
Intent intent;
        		switch (v.getId())
        		{
        		case R.id.mainButton1: intent = new Intent(main.this, func1.class); break;
        		case R.id.mainButton2: intent = new Intent(main.this, func2.class); break;
        		case R.id.mainButton3: intent = new Intent(main.this, func3.class); break;
        		default: intent = new Intent (main.this, main.class);
        		}
        		startActivity(intent);
```

dir helfen


----------



## penta (28. Feb 2011)

Hey vielen Dank! =)

Es haben wirklich nur die "breaks" gefehlt =)


----------



## DerEisteeTrinker (28. Feb 2011)

kaum macht man es richtig, schon gehts 

PS.: es gibt so einen tollen "Danke"-Button unter den Beiträgen


----------



## ASweetTeddyBear (1. Mrz 2014)

Guten Abend zusammen, ich habe grade mit der Android Programmierung begonnen, habe allerdings schon seit knapp einem Jahr Java geschrieben, jedoch verwirren mich momentan die Anweisungen "main.this", sowie "list1.class" ein wenig, wäre wunderbar wenn sie mir jemand anhand meines eigenen Programmes erklären könnte.

Vielen Dank 


```
package com.example.second;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {

	
	public Button btn;
	public TextView Text;
	public TextView Text2;
	public Button btn2;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btn= (Button) findViewById(R.id.button);
		Text= (TextView) findViewById(R.id.text);
		Text2= (TextView) findViewById(R.id.text2);
		btn2= (Button) findViewById (R.id.button2);
		
		btn.setOnClickListener(this);
		btn2.setOnClickListener(this);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	public void ersterButton()
	{
		Text.setText("Du hast den ersten Button gedrückt");
	}
	public void zweiterButton()
	{
		Text2.setText("Du hast den zweiten Button gedrückt");
	}

	@Override
	public void onClick(View v) 
	{
		Intent intent;
		switch (v.getId())
		{
		//case R.id.button: intent =new Intent(MainActivity.this,MainActivity.class);  break;
		//case R.id.button2: intent =new Intent(MainActivity.this, MainActivity.class); break;
		default: intent =  new Intent ();
		}
		startActivity(intent);
		
	}
}
```

Also das was als Kommentar dort steht, an dieser Stelle weiß ich nicht was ich dort schreiben müsste


----------

