在使用intent添加联系人后,我的onActivityForResult
方法中包含以下代码。
if (mySharedPrefs.getBoolean("settingsPopup", false) == false) { //First time
new AlertDialog.Builder(this)
.setTitle("Go to settings? ")
.setMessage("POPUP")
.setNegativeButton("No", null)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent settingsIntent = new Intent(MainActivity.this, Settings.class);
startActivity(settingsIntent);
}
}).show();
myEditor = mySharedPrefs.edit();
myEditor.putBoolean("settingsPopup", true);
myEditor.commit();
}
我希望这个弹出窗口只显示一次,这就是为什么我设置共享首选项键值" settingsPopup"在我第一次显示对话框后变为true。但出于某种原因,对话框显示每次 onActivityForResult
方法被调用。为什么每次都显示?
PS:我使用相同的共享首选项对象来存储其他值。
我在onCreate
中初始化我的共享首选项,如下所示:
mySharedPrefs = this.getSharedPreferences("sharedPrefsName", MainActivity.MODE_PRIVATE); //Making a shared preferences
答案 0 :(得分:0)
尝试将代码放在boolean
代码之前存储AlertDialog
变量:
if (mySharedPrefs.getBoolean("settingsPopup", false) == false) { //First time
myEditor = mySharedPrefs.edit();
myEditor.putBoolean("settingsPopup", true);
myEditor.commit();
new AlertDialog.Builder(this)
.setTitle("Go to settings? ")
.setMessage("POPUP")
.setNegativeButton("No", null)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent settingsIntent = new Intent(MainActivity.this, Settings.class);
startActivity(settingsIntent);
}
}).show();
}
答案 1 :(得分:0)
请尝试使用apply()
。 Apply将立即更新首选项对象并异步保存新值,因此允许您读取最新值。
根据文件:
与commit()同步地将其首选项写入持久存储,apply()会立即将其更改提交到内存中的SharedPreferences,但会启动异步提交到磁盘,并且不会通知您任何失败。如果此SharedPreferences上的另一个编辑器在apply()尚未完成时执行常规commit(),则commit()将阻塞,直到完成所有异步提交以及提交本身。
接着说:
由于SharedPreferences实例是进程中的单例,如果您已经忽略了返回值,则可以使用apply()替换commit()的任何实例。
答案 2 :(得分:0)
创建一个类并将其命名为 SettingManager ,如下所示:
public class SettingsManager {
public static final String DEFAULT_PREFERENCES_NAME = "defaultPreferences";
public static final String PREFERENCE_FIRST_RUN = "isFirstRun";
public static SharedPreferences getDefaultPreferences(Context context) {
return context.getSharedPreferences(DEFAULT_PREFERENCES_NAME, Context.MODE_PRIVATE);
}
public static boolean isFirstRun(Context context) {
SharedPreferences preferences = getDefaultPreferences(context);
boolean isFirstRun = preferences.getBoolean(PREFERENCE_FIRST_RUN, true);
preferences.edit().putBoolean(PREFERENCE_FIRST_RUN, false).commit();
return isFirstRun;
}
}
然后用这样的话来称呼它:
boolean isFirstRun = SettingManager.isFirstRun(getActivity());