2017-11-09 21 views
0

Ich bin dieser Bibliothek für datetime Picker https://github.com/florent37/SingleDateAndTimePicker es funktioniert gut, aber wenn ich den SingleDateAndTimePicker Dialog geöffnet bin und onBack drücken Methode dann Dialogfeld ist geschlossen, aber ich bin nicht in der Lage, zurück zu gehen activity und wenn das Dialogfeld nicht geöffnet ist, dann onBack presscode ist Feuer jede Lösung auf die würde geschätzt werden. mein Code:OnBackPress Methode ist nicht Feuer, wenn das Dialogfeld geöffnet ist

@Override 
public void onBackPressed() { 
    long currentTime = System.currentTimeMillis(); 
    if (singleDateAndTimePickerDialog!=null) { 
     singleDateAndTimePickerDialog.dismiss(); 

    } else if (currentTime - lastPress > 5000) { 
     Toast.makeText(getBaseContext(), "Press back again", Toast.LENGTH_LONG).show(); 
     lastPress = currentTime; 
    } else { 
     super.onBackPressed(); 
    } 
} 
+1

könnte sein Duplikat [onbackpress Ereignis nicht ausgelöst, wenn Dialogfeld geöffnet ist] (https://stackoverflow.com/questions/17655239/onbackpress- nicht-aufgerufen-wenn-pop-up-window-is-displayed) – androidOnHigh

+0

yamini wenn ich mit finish() dann Aktivität auch geschlossen wurde. – ashish

Antwort

1

Sie können dies versuchen:

// globale Variable privaten SingleDateAndTimePickerDialog singleDateAndTimePickerDialog = null;

 onCreate(){ 
     singleDateAndTimePickerDialog = new SingleDateAndTimePickerDialog(this); 
        } 

        @Override 
        public void onBackPressed() { 

     if(singleDateAndTimePickerDialog != null 
     && singleDateAndTimePickerDialog.isDisplaying()){ 

        singleDateAndTimePickerDialog.dismiss(); 
        return; 
        }//if 

         super.onBackPressed(); 
         finish(); 

        } 

================================== EDIT ======== ==========================

Sie können Android DatePicker und TimePicker verwenden.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:padding="8dp" 
    android:layout_height="match_parent"> 

    <DatePicker 
     android:id="@+id/date_picker" 
     android:layout_width="match_parent" 
     android:calendarViewShown="true" 
     android:spinnersShown="false" 
     android:layout_weight="4" 
     android:layout_height="0dp" /> 

    <TimePicker 
     android:id="@+id/time_picker" 
     android:layout_weight="4" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" /> 

    <Button 
     android:id="@+id/date_time_set" 
     android:layout_weight="1" 
     android:layout_width="match_parent" 
     android:text="Set" 
     android:layout_height="0dp" /> 

</LinearLayout> 

..und android Dialog.

final View dialogView = View.inflate(activity, R.layout.date_time_picker, null); 
final AlertDialog alertDialog = new AlertDialog.Builder(activity).create(); 

dialogView.findViewById(R.id.date_time_set).setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 

     DatePicker datePicker = (DatePicker) dialogView.findViewById(R.id.date_picker); 
     TimePicker timePicker = (TimePicker) dialogView.findViewById(R.id.time_picker); 

     Calendar calendar = new GregorianCalendar(datePicker.getYear(), 
          datePicker.getMonth(), 
          datePicker.getDayOfMonth(), 
          timePicker.getCurrentHour(), 
          timePicker.getCurrentMinute()); 

     time = calendar.getTimeInMillis(); 
     alertDialog.dismiss(); 
    }}); 
alertDialog.setView(dialogView); 
alertDialog.show(); 

So können Sie es wie folgt tun:

@Override 
    public void onBackPressed() { 

    if(alertDialog != null && alertDialog.isShowing()){ 

    alertDialog.dismiss(); 
    return; 
    }//if 

    super.onBackPressed(); 
    finish(); 

    } 
+0

Fragesteller seine nahe Aktivität auch keine Idee? – ashish

+0

Sie können bearbeitete Antwort – propoLis

+0

versuchen, das gleiche Ergebnis wie pro Code was wir tun? – ashish

0

können Sie versuchen, die Aktivität Finishing, sobald der Dialog geschlossen wurde.

@Override public void onBackPressed() { 
long currentTime = System.currentTimeMillis(); 
if (singleDateAndTimePickerDialog!=null) { 
    singleDateAndTimePickerDialog.dismiss(); 
    finish(); // Or super.onBackPressed(); 
} else if (currentTime - lastPress > 5000) { 
    Toast.makeText(getBaseContext(), "Press back again", Toast.LENGTH_LONG).show(); 
    lastPress = currentTime; 
} else { 
    super.onBackPressed(); 
} 
} 
0

Versuchen Sie dieses

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     onBackPressed(); 
    } 
     return super.onKeyDown(keyCode, event); 
    } 
} 
+0

mehul seine Schließung Aktivität auch mein Code funktioniert gut, aber es ist nicht Feuer, wenn das Dialogfeld geöffnet ist – ashish

0

super.onBackPressed();

in anderen Zustand ist es in Ordnung mit Ihrem Zustand, weil in diesem Zustand onback nicht Feuer weil super.onback in nicht ordnungsgemäßen Zustand.

+0

können Sie mit meinem Code erarbeiten? – ashish

Verwandte Themen