# Dialog anzeigen wenn auf Button gedrückt wird.



## Lucaaa (16. Feb 2017)

Hallo!
Ich habe eine App (siehe 2x Auf Zurücktaste um App zu schließen) Jetzt möchte ich das sich ein Dialog öffnet, wenn man auf einen Button in der ActionBar klickt (Button funktioniert auch) allerdings wird der Dialog nicht angezeigt.


```
package com.luca.java.android.androlamp;

import com.example.androlamp.R;

import android.app.Activity;
import android.app.Dialog;
import android.content.pm.PackageManager;

import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.os.Handler;
import android.view.KeyEvent;
import android.view.MenuInflater;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.Toast;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
   
public class MainActivity extends Activity {

    Switch s1;
    android.hardware.Camera cam; 
    Parameters param; 
    boolean licht;
   
    boolean pressedBackKey = false;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
       
    s1 = (Switch) findViewById(R.id.switch1);
    s1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
       
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
           
            if(isChecked == true) {
                if(getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) {
                    if(cam == null) {
                        cam = android.hardware.Camera.open();
                    }
                   
                    param = cam.getParameters();
                    param.setFlashMode(Parameters.FLASH_MODE_TORCH);
                    cam.setParameters(param);
                    cam.startPreview();
                   
                    licht = true;
                   
                } else {
                    Toast.makeText(getApplicationContext(), "your cellphone do not have a flash!", Toast.LENGTH_SHORT).show();
                }
            }
            if(isChecked == false) {
                lichtaus();
            }
           
        }
        });
    }


public void lichtaus() {
    if(licht == false) {
        cam = android.hardware.Camera.open();
    }
   
    param = cam.getParameters();
    param.setFlashMode(Parameters.FLASH_MODE_OFF);
    cam.setParameters(param);
    cam.stopPreview();
   
    licht = false;
   
   
   
}


@Override
protected void onPause() {
    if (licht == true) {
    lichtaus();
    cam.release();
}
    super.onPause();
}

    @Override
    protected void onResume() {
        s1.setChecked(false);
        super.onResume();
    }


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK )    {
            if (pressedBackKey == false) {
                pressedBackKey = true; 
                Toast.makeText(getApplicationContext(), "Zurücktaste 2x drücken zum schließen", Toast.LENGTH_SHORT).show();
               
                new Handler().postDelayed(new Runnable() {
                   
                    @Override
                    public void run() {
                        pressedBackKey = false;
                    }
                } , 3000); 
            } else if (pressedBackKey == true) {
                onBackPressed();
            }
}
        return true;
    }
   
    // Menü in der ActionBar
   
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_activity_menu, menu);
        return true;
    }
   
    @Override
    public boolean onOptionsItemSelected (MenuItem item) {
        int id = item.getItemId();
            if (id == R.id.about_the_app) {
                Toast.makeText(getApplicationContext(), "Test erfolgreich", Toast.LENGTH_SHORT).show();
                final Dialog dig1 = new Dialog(MainActivity.this);
                dig1.setContentView(R.layout.dialog_about_the_app);
                dig1.setTitle("über AndroLamp");
                return true;
            }
            return super.onOptionsItemSelected(item);
    }
   
       
       
}
```


----------



## Robat (16. Feb 2017)

Mit `dialog.show()` musst du dir den Dialog noch anzeigen lassen.


----------



## Lucaaa (16. Feb 2017)

Okay. Jetz hav ich das Problem das ich einen Text im Dialog anzeigen will. (nur eine Zeile oder max 2) Habe das Jetz mit einem Nichteditirbaren Textfeld gemacht. (hab auch schon mal irgendwas von 
	
	
	
	





```
setMassege()
```
 gelesen, funktioniert aber nicht. jedenfalls stürzt die App immer ab wenn ich versuche den Dialog mit dem Textfeld anzuzeigen.
Hier der Code

```
package com.luca.java.android.androlamp;

import com.example.androlamp.R;

import android.app.Activity;
import android.app.Dialog;
import android.content.pm.PackageManager;

import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.os.Handler;
import android.view.KeyEvent;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Switch;
import android.widget.Toast;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
   
public class MainActivity extends Activity {

    Switch s1;
    EditText editText1;
    android.hardware.Camera cam; 
    Parameters param; 
    boolean licht;
   
    boolean pressedBackKey = false;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
       
    s1 = (Switch) findViewById(R.id.switch1);
    s1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
       
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
           
            if(isChecked == true) {
                if(getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) {
                    if(cam == null) {
                        cam = android.hardware.Camera.open();
                    }
                   
                    param = cam.getParameters();
                    param.setFlashMode(Parameters.FLASH_MODE_TORCH);
                    cam.setParameters(param);
                    cam.startPreview();
                   
                    licht = true;
                   
                } else {
                    Toast.makeText(getApplicationContext(), "your cellphone do not have a flash!", Toast.LENGTH_SHORT).show();
                }
            }
            if(isChecked == false) {
                lichtaus();
            }
           
        }
        });
    }


public void lichtaus() {
    if(licht == false) {
        cam = android.hardware.Camera.open();
    }
   
    param = cam.getParameters();
    param.setFlashMode(Parameters.FLASH_MODE_OFF);
    cam.setParameters(param);
    cam.stopPreview();
   
    licht = false;
   
   
   
}


@Override
protected void onPause() {
    if (licht == true) {
    lichtaus();
    cam.release();
}
    super.onPause();
}

    @Override
    protected void onResume() {
        s1.setChecked(false);
        super.onResume();
    }


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK )    {
            if (pressedBackKey == false) {
                pressedBackKey = true; 
                Toast.makeText(getApplicationContext(), "Zurücktaste 2x drücken zum schließen", Toast.LENGTH_SHORT).show();
               
                new Handler().postDelayed(new Runnable() {
                   
                    @Override
                    public void run() {
                        pressedBackKey = false;
                    }
                } , 3000); 
            } else if (pressedBackKey == true) {
                onBackPressed();
            }
}
        return true;
    }
   
    // Menü in der ActionBar
   
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_activity_menu, menu);
        return true;
    }
   
    @Override
    public boolean onOptionsItemSelected (MenuItem item) {
        int id = item.getItemId();
            if (id == R.id.about_the_app) {
                final Dialog dig1 = new Dialog(MainActivity.this);
                dig1.setContentView(R.layout.dialog_about_the_app);
                dig1.setTitle(R.string.dialog_about_the_app_headline);
                dig1.show();
               
                editText1 = (EditText) findViewById(R.id.editText1);
                editText1.setText(R.string.dialog_about_the_app_version);
                return true;
            }
            return super.onOptionsItemSelected(item);
    }
   
       
       
}
```


----------



## Robat (16. Feb 2017)

Lucaaa hat gesagt.:


> jedenfalls stürzt die App immer ab wenn ich versuche den Dialog mit dem Textfeld anzuzeigen.



Leider ist meine Zauberkugel kaputt - kannst du vielleicht den Stacktrace posten? 

Würde mal vermuten dass der Error kommt weil du `dig1.show()` nicht ganz am Ende aufrufst. Schieb das mal vor `return true;`


Was auch sein könnte ist dass er die ID vom EditText bzw des Strings nicht findet. Aber mit einem Stacktrace kann man da mehr drüber sagen 

PS: Die `setMessage()` gibt es afaik nur beim AlertDialog.Builder 

Gruß Robert


----------



## Joose (16. Feb 2017)

Wenn die App abstürzt gibt es sicher eine Exception. Da musst du ansetzen -> die Exception verrät dir was passiert


----------

