Dialog anzeigen wenn auf Button gedrückt wird.

Lucaaa

Bekanntes Mitglied
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.

Java:
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);
    }
   
       
       
}
 
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
Java:
setMassege()
gelesen, funktioniert aber nicht. jedenfalls stürzt die App immer ab wenn ich versuche den Dialog mit dem Textfeld anzuzeigen.
Hier der Code
Java:
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);
    }
   
       
       
}
 
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
 

Zurück
Oben