DatePickerDialog aus einem CustomDialog aufrufen

  • Antworten:8
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 37

14.02.2017, 13:02:27 via Website

Hallo,

ich versuche einen DatePickerDialog aus einem Custom Dialog aufzurufen. Der CustomDialog wird über ein Menü aufgerufen und enthält zwei EditText, zwei Buttons und einen DatePickerDialog.

Ein Button in diesem Dialog soll dann den DatePicker aufrufen, was aber einfach nicht funktionieren will. Eigentlich wollte ich eine eigene Klasse für den CustomDialog verwenden in der ich dann auch den Constructor für den DatePickerDialog haben wollte. Bekomme ich aber nicht hin.

Jetzt starte ich den CustomDialog einfach wie folgt:

    //Wird aufgerufen wenn ein Menüeintrag ausgewählt wurde.    
    @Override
    public boolean onOptionsItemSelected(MenuItem item){
        switch (item.getItemId()) {
        case R.id.neueAnfrage:

        final Dialog dialog = new Dialog(MainActivity.this);
            dialog.setContentView(R.layout.activity_neuedatei_dialog_xml);
            dialog.setTitle("Neue Anfrage");
            dialog.show();

            EditText editTextDatum     = (EditText) dialog.findViewById(R.id.editTextDatum);
            Button ButtonAbbrechen  = (Button)   dialog.findViewById(R.id.buttonAbbrechen);
                Button ButtonDatum         = (Button)   dialog.findViewById(R.id.buttonDatum);

//Click Events

            ButtonDatum.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {

                    mDateSetListener = new DatePickerDialog.OnDateSetListener();
                        DatePickerDialog.OnDateSetListener 
                        mDateSetListener = new DatePickerDialog.OnDateSetListener(){ 
                            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                                jahr  = year;
                                monat = monthOfYear;
                                tag   = dayOfMonth;
                                //updateDisplay();

                            }   
                        };


                       showDialog(new DatePickerDialog(this, mDateSetListener, jahr, monat, tag);
                }
            });


            ButtonAbbrechen.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    dialog.cancel();    
                }
            }); 
        }
        return true;
    }   

Der Abbrechen Button funktioniert, aber mit dem DatepickerDialog komme ich nicht weiter. Einfach einen DatePickerDialog aufzurufen ist mir klar wie es geht aber bei einem DatePickerDialog aus einem CustomDialog heraus weiss ich nicht wie ich es anstellen muß. Ich finde auch keine Beispiele im Netz dazu.

Es wäre nett wenn mir hier einer von euch weiterhelfen könnte.

Viele Grüße und vielen Dank!
Sebastian

Antworten
  • Forum-Beiträge: 2.902

14.02.2017, 13:10:38 via Website

Hallo Sebastian,

damit man es ein wenig nachvollziehen kann :

Dieser Part hier geht bei dir , wenn du ihn separierst und aus dem Custom heraus nimmst, richtig ??

   mDateSetListener = new DatePickerDialog.OnDateSetListener();
                    DatePickerDialog.OnDateSetListener 
                    mDateSetListener = new DatePickerDialog.OnDateSetListener(){ 
                        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                            jahr  = year;
                            monat = monthOfYear;
                            tag   = dayOfMonth;
                            //updateDisplay();
                        }   
                    };
                   showDialog(new DatePickerDialog(this, mDateSetListener, jahr, monat, tag);

.

Liebe Grüße - Stefan
[ App - Entwicklung ]

Pascal P.

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.169

14.02.2017, 15:47:25 via App

Hallo Sebastian,
ich vermute dass man allgemein keine geschachtelten Dialoge aufrufen kann.
Füge doch einfach einen DatePicker als View auf deinen Custom Dialog Kannst diesen ja auch mit deinem Button aus und einblendbar machen.

— geändert am 14.02.2017, 18:52:43

LG Pascal //It's not a bug, it's a feature. :) ;)

swa00

Antworten
  • Forum-Beiträge: 2.902

14.02.2017, 15:50:32 via Website

Das Gleiche habe ich auch schon vermutet.

Deshalb wollte ich erst mal sichergehen ,dass sein Picker geht,

Ich habe auch noch keine zwei Dialoge aufeinander gesehen :-)

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
  • Forum-Beiträge: 37

15.02.2017, 02:53:47 via Website

Hallo Stefan, Hallo Pascal,

erst mal Danke für eure schnellen Antworten. Ich habe den ganzen CustomDialog mal als normale Activity zusammengebaut. Da funktioniert der Aufruf des Datepickers wie erwartet. Wenn ich es dann im CustomDialog nachbaue, scheitere ich allerdings und bekomme es nicht zum funktionieren. Das was ich im Eingangsposting gezeigt habe läuft zwar aber funktioniert letztlich nicht. Problem beim CustomDialog ist irgendwie der Aufruf von onCreateDialog für den Datepicker zu erzeugen.
Ich verwende übrigens nicht direkt den DatePicker da er zu viel Platz im CustomDialog wegnimmt.

Vielleicht fällt euch noch etwas ein wie es gehen könnte sonst muß ich mir was anderes überlegen.

Viele Grüße und besten Dank nochmals!
Sebastian

Hier der Code wie das ganze in einer Activity funktioniert:

private EditText editTextDatum;
private int jahr;
private int monat;
private int tag;
static final int DATE_DIALOG_ID = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_neuedatei_dialog_xml);

    editTextDatum = (EditText) findViewById(R.id.editTextDatum);

    EditText editTextOrt   = (EditText) findViewById(R.id.editTextOrt);
    EditText editTextInfo  = (EditText) findViewById(R.id.editTextInfo);

    Button ButtonAbbrechen    = (Button) findViewById(R.id.buttonAbbrechen);
    Button ButtonUebernehmen  = (Button) findViewById(R.id.buttonUebernehmen);
    Button ButtonDatum        = (Button) findViewById(R.id.buttonDatum);

    ButtonAbbrechen.setOnClickListener(this);
    ButtonUebernehmen.setOnClickListener(this);
    ButtonDatum.setOnClickListener(this);

    //Datum
    final Calendar Datumcalendar = Calendar.getInstance();
    jahr  = Datumcalendar.get(Calendar.YEAR);
    monat = Datumcalendar.get(Calendar.MONTH);
    tag   = Datumcalendar.get(Calendar.DAY_OF_MONTH);

    updateDisplay();
}

private void updateDisplay(){
    editTextDatum.setText(
            new StringBuilder()
            .append(tag).append(".")
            .append(monat + 1).append(".")
            .append(jahr).append(""));

}

private DatePickerDialog.OnDateSetListener 
mDateSetListener = new DatePickerDialog.OnDateSetListener() {
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        jahr  = year;
        monat = monthOfYear;
        tag   = dayOfMonth;
        updateDisplay();
    }

};

private static String pad(int c) {
if (c >= 10)
return String.valueOf(c);
else
return "0" + String.valueOf(c);
}

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
        case DATE_DIALOG_ID:
            return new DatePickerDialog(this, mDateSetListener, jahr, monat, tag);

        case 1:        
            //wird bisher nicht verwendet;   

    }
    return null;
}

@Override
public void onClick(View view) {
    // TODO Auto-generated method stub

    switch (view.getId()) {

        case R.id.buttonAbbrechen:
           finish();
           break;

        case R.id.buttonUebernehmen:
             Intent i = new Intent(NeueDateiActivity.this, MainActivity.class);
             startActivity(i);
             break;

        case R.id.buttonDatum:
            showDialog(DATE_DIALOG_ID); 
            break;

        }

    }

}

Hier noch ein Ausschnitt wie der CustomDialog an der Stelle aussieht.
image

— geändert am 15.02.2017, 03:08:21

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.169

15.02.2017, 08:43:40 via App

Wie schon gesagt aus einem CustomDialog kannst du keinen weiteren Dialog aufrufen...
Nimm die View und bastel diese in dein Layout.
Ider du lässt es als Activity und gibst einen. Result zurück.
Dann hast du eine Art DialogActivity weil wenn ok darin kann das Ergebnis ber Callback an die Aufrufende zurückgegeben werden.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 37

17.02.2017, 11:25:00 via Website

Hallo,

hab's jetzt hin bekommen mehrere CustomDialoge verschachtelt aufzurufen. Im Prinzip erzeugt man einfach einen weiteren CustomDialog und ruft diesen im OnClick des ersten Dialogs auf. Verschachtelte Dialoge sind also eigentlich recht einfach zu realisieren. Was dabei aber aufwendig werden kann, ist der Datenaustausch der Dialoge untereinander aber auch das geht, man muß nur die Variablen als final deklarieren.
Was ich nicht hinbekommen habe ist speziell den DatePickerDialog anstatt eines weiteren CustomDialogs aufzurufen. Alternativ habe ich dann aber in den zweiten CustomDialog einen Datepicker eingefügt mit zwei Buttons und hab damit auch einen "DatePickerDialog" den man sogar noch viel flexibler einsetzen kann.

Vielen Dank nochmal für eure Beteiligung und Viele Grüße
Sebastian

— geändert am 17.02.2017, 12:08:12

swa00

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.169

17.02.2017, 11:30:51 via App

Hallo SebastianE!

Super, wenn deine Frage geklärt ist, setze doch bitte noch deinen Thread auf "Beantwortet"!

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 37

17.02.2017, 12:09:24 via Website

Hallo Pascal,

sorry, hab ich vergessen aber ist jetzt erledigt. :)

VG
Sebastian

Antworten

Empfohlene Artikel