我正在尝试显示弹出窗口,如果用户点击不再显示,我想再也不会显示它。但是,dont show again
按钮无效。我正在使用共享首选项:
if (dialogPrefs.getBoolean("Show", true) == true) {
new AlertDialog.Builder(this)
.setTitle("Blah")
.setMessage("Blah blah blah ")
.setNegativeButton("Not now", null)
.setNeutralButton("Don't show again", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialogEditor = dialogPrefs.edit();
dialogEditor.putBoolean("Show", false);
dialogEditor.commit();
}
})
.setPositiveButton("Enable", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
enable();
}
}).show();
我的偏好和编辑器在开头就是这样声明的:
SharedPreferences dialogPrefs;
SharedPreferences.Editor dialogEditor;
共享首选项在onCreate()
初始化。
请让我知道问题所在。
谢谢,
Ruchir
答案 0 :(得分:0)
SharedPreferences.Editor.commit()
返回一个布尔值,表示写入实际SharedPreferences对象的状态。查看commit()
是否返回true
。另外,请确保您没有使用两个编辑器编辑相同的SharedPreference。提交的最后一个编辑器将反映其更改。
更新运行时,您的代码运行正常。我的代码中没有任何错误。请确保您正在写入和阅读相同的SharedPreferences。
答案 1 :(得分:0)
你的问题是SharedPreferences
的声明;它已全部宣布但未初始化!操作系统应该在哪里写出您的键值数据?
我建议你阅读Get a Handle to a SharedPreferences
试试这段代码,我测试了它并且正常工作:
SharedPreferences dialogPrefs = this.getPreferences(Context.MODE_PRIVATE);
final SharedPreferences.Editor dialogEditor = dialogPrefs.edit();
if (dialogPrefs.getBoolean("Show", true)) {
new AlertDialog.Builder(this)
.setTitle("Blah")
.setMessage("Blah blah blah ")
.setNegativeButton("Not now", null)
.setNeutralButton("Don't show again", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialogEditor.putBoolean("Show", false);
dialogEditor.commit();
}
})
.setPositiveButton("Enable", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Log.i("TAG", "onClick: enable");
}
}).show();
}
}
答案 2 :(得分:0)
应该是这样的:
if (!dialogPrefs.getBoolean("Show", false)) {//don't show again will work
而不是:
if (dialogPrefs.getBoolean("Show", true) == true) {//this will always show dialog