如果这一切看起来令人困惑,请忽略我所说的,并查看代码和标题为“Heres the strange Part”的部分。另外,请查看我底部的日志。
所以基本上,我使用共享首选项只做一次。 以下是我的工作:
因此,如果用户没有启用位置,我会检查共享首选项,看看他们是否要我显示对话框,如果共享首选项为false,我会显示它。
LocationManager locationManager =
(LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) &&
!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) &&
dialogPrefs.getBoolean("show", false) == false) {
Log.v(TAG, dialogPrefs.getBoolean("show", false) +" GET BOOLEAN");
new AlertDialog.Builder(this)
.setTitle("Location not enabled ")
.setMessage("Blah")
.setNegativeButton("Remind again when I come to this activity", null)
.setNeutralButton("Don't show again...EVER!!!", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialogEditor.putBoolean("show", true);
dialogEditor.commit();
Log.v(TAG, dialogPrefs.getBoolean("show", false) +" GET BOOLEAN");
}
})
.setPositiveButton("Enable", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//All location services are disabled
Intent gpsOptionsIntent = new Intent(
android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(gpsOptionsIntent);
}
}).show();
}
注意我的日志。
if语句总是通过...在我的日志中,我在第一次提交更改后检查dialogPrefs.getBoolean
的值,它是 true < / strong>(这很好)!然后,突然,该方法再次被调用,dialogPrefs.getBoolean
为FALSE!
为什么这个布尔值会改变?这是最奇怪的事情,因为它是一个如此简单的问题,并且以一种意想不到的方式表现。
V/myTag: false GET BOOLEAN //This is when the popup comes
V/myTag: true GET BOOLEAN //After I change value
V/myTag: false GET BOOLEAN //AFTER COMING BACK TO ACTIVITY!! WHY FALSE AGAIN!?!?
编辑:
我在onCreate
初始化:
dialogPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
dialogEditor = dialogPrefs.edit();
答案 0 :(得分:0)
当你调用dialogPrefs.edit()时,你会得到一个Editor实例,然后不再使用该实例,并且可能会收集垃圾。所以下次你打电话给它时,它没有被保存。
您可能还想使用dialogPrefs.apply而不是dialogPrefs.commit。提交是同步完成的,并返回是否已成功保存,其中apply是异步且更快(因为大多数人都没有检查响应)
preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0);
SharedPreferences.Editor dialogEditor = preferences.edit();
dialogEditor.putBoolean("show", true);
dialogEditor.apply();