# Custom Dialog Button event



## Lodorvonhal (13. Feb 2012)

Hallo ich habe folgendes Problem.

Ich habe eine App gebastelt und rufe über die Menü Taste ein Menü auf und dort über ein Element einen Custom Dialog. Die Anleitung dazu habe ich Dialogs | Android Developers hier her.

der Dialog öffnet sich auch. Alles ohne Probleme.

Ich kann nur leider auf die Buttons keine Events aufrufen. Ich weis momentan nicht weiter. 

Hier der Code:

```
dialoge = new Dialog(MainActivity.this);
	        	
dialoge.setContentView(R.layout.v_options);

dialoge.setTitle("Custom Dialog");
dialoge.show();
	        	
LayoutInflater inflater = (LayoutInflater) MainActivity.this
	    				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.v_options,
	    		          (ViewGroup) MainActivity.this.findViewById(R.layout.v_options));
Button button = (Button) layout.findViewById(R.id.v_options_button_save);
Log.i(TAG, "nanam    ");
button.setOnClickListener(new View.OnClickListener() {
	    			
@Override
public void onClick(View v) {
dialoge.dismiss();
Log.i(TAG, "blaaaa");
}
});
```

Danke fürs lesen!


----------



## schlingel (13. Feb 2012)

Kein Wunder, da hast du ein paar Sachen durcheinander gebracht.


```
dialoge = new Dialog(MainActivity.this);
                
dialoge.setContentView(R.layout.v_options);
 
dialoge.setTitle("Custom Dialog");
```
So weit so schlecht. Du erstellst dir einen Dialog mit dem Konstruktor anstatt den von der Doku vorgeschlagenen Pfad zu wählen:



			
				Doku hat gesagt.:
			
		

> However, because an AlertDialog is created easiest with the AlertDialog.Builder class, you do not have access to the setContentView(int) method used above.



Aber egal, das ist ja nicht das einzige Problem.


```
dialoge.show();
```

Bumm, der Dialog ist da ohne dass die Handler gesetzt sind.


```
View layout = inflater.inflate(R.layout.v_options,
                          (ViewGroup) MainActivity.this.findViewById(R.layout.v_options));
```

Nun erzeugst du eine neue View und setzt den Parent auf null. Denn findViewById erwartet eine ID die du im Layout mit android:id="@+id/myViewId" setzt. Da du aber bei der inflate-Methode gefahrlos einen Nullwert eintragen kannst, merkst du das nicht weiter.


```
button.setOnClickListener(new View.OnClickListener() //...
```
An dieser Stelle hängst du deinen Event-Listener an einem Button an der wiederum in einer View hängt die wiederum im Nirvana vor sich hin geistert.

Viel besser wäre es, wenn du den Code ca. so umbaust. (Achtung: ungetestet)

```
AlertDialog.Builder builder;
AlertDialog alertDialog;

Context context = getApplicationContext();
LayoutInflater inflater = (LayoutInflater)LayoutInflater.from(context); 
View layout = inflater.inflate(R.layout.v_options, null);
Button button = (Button) layout.findViewById(R.id.v_options_button_save);
Log.i(TAG, "nanam    ");
button.setOnClickListener( /*Dein event listener*/ );

builder = new AlertDialog.Builder(mContext);
builder.setView(layout);
alertDialog = builder.create();
alertDialog.show();
```

1. Doku


----------



## Lodorvonhal (13. Feb 2012)

Hi schlingel.

Danke für die Antwort. Mit deinem Code geht es leider so nicht. macht aber nix.

Ich habe verstanden wo der Fehler liegt.

So geht es nun. Ich weis nicht ob ich nun noch Fehler mache. Aber es geht ^^


```
dialoge = new Dialog(this);
	        	
dialoge.setContentView(R.layout.v_options);
dialoge.setTitle(R.string.v_options);
	        	
Button button = (Button) dialoge.findViewById(R.id.v_options_button_abort);
Log.i(TAG, "nanam    ");
button.setOnClickListener(new View.OnClickListener() 
{
@Override
public void onClick(View v) {
dialoge.dismiss();
Log.i(TAG, "blaaaa");
}
});
	        	
dialoge.show();
```

Danke dir


----------

