2017-08-13 110 views
0

每次用户进入应用程序时,onResume()都在呼叫。如果用户在警报对话框中没有响应,则对话框只会累积。我想检查是否已显示对话框。警报对话多次呼叫

我发现这里给予了极大的答案:Prevent dialog to be opened multiple times when resuming activity这里How do I show only one Dialog at a time?但总是被一些错误而实施,在我的代码

警报对话框

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()

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

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

回答

1

你可以做的是把boolean isDialogBox显示在sharedPreferences中,并将其设置为true。当用户点击dialogBox的正面或负面按钮。并检查是否isDialogBox是的onResume

真正将这个代码在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; 
} 

这的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

刚关闭onPause方法的对话框,你将只能有一个显示

@Override 
protected void onPause(){ 
super.onPause(); 

}