2017-08-13 3 views
0

Jedes Mal, wenn Benutzer in Anwendung eingibt, ruft onResume() auf. Wenn der Benutzer im Alarmdialog nicht antwortet, werden die Dialoge nur angehäuft. Ich möchte prüfen, ob der Dialog bereits angezeigt wird.Warnungsdialog, der mehrere Male aufruft

Ich fand große Antworten hier gegeben: Prevent dialog to be opened multiple times when resuming activity und hier How do I show only one Dialog at a time? aber immer war ein Fehler, während der

Warndialog

private AlertDialog.Builder showGPSDialog(Context con) { 

    AlertDialog.Builder builder = new AlertDialog.Builder(con); 
    builder.setTitle("Enable GPS"); 
    builder.setMessage("Please enable GPS"); 

    builder.setPositiveButton("Enable", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      startActivity(
        new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS)); 
     } 
    }); 
    builder.setNegativeButton("Ignore", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.dismiss(); 
     } 
    }); 
    return builder; 
} 

onResume() in meinem Code Umsetzung

LocationManager mlocManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
    boolean isEnabled = mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 

    if(!isEnabled) { 
     showGPSDialog(MapsActivity.this).show(); 
    } 

Antwort

1

Was Sie tun können, ist boolean isDialogBox in sharedPreferences gezeigt und machen Sie es wahr. Wenn der Benutzer auf die positive oder negative Schaltfläche von dialogBox klickt. und prüfen, ob isDialogBox wahr ist in onResume

Setzen Sie diesen Code in oncreate

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(); 
private AlertDialog.Builder showGPSDialog(Context con) { 

    AlertDialog.Builder builder = new AlertDialog.Builder(con); 
    builder.setTitle("Enable GPS"); 
    builder.setMessage("Please enable GPS"); 

    builder.setPositiveButton("Enable", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
     prefs.edit().putBoolean("isShown", true).commit(); 
      startActivity(
        new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS)); 
     } 
    }); 
    builder.setNegativeButton("Ignore", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
     prefs.edit().putBoolean("isShown", true).commit() 
      dialog.dismiss(); 
     } 
    }); 
    return builder; 
} 

Das in onResume

LocationManager mlocManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
boolean isEnabled = mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 

if(!(prefs.getBoolean("isShown", false))) { 
    showGPSDialog(MapsActivity.this).show(); 
} 
1

Nur Schließen Sie den Dialog für die onPause-Methode und Sie können nur einen mit

haben 210