Java 显示一次弹出窗口?
我正在尝试显示一个弹出窗口,如果用户再次单击“不显示”,我希望不再显示它。但是,Java 显示一次弹出窗口?,java,android,database,string,algorithm,Java,Android,Database,String,Algorithm,我正在尝试显示一个弹出窗口,如果用户再次单击“不显示”,我希望不再显示它。但是,不再显示按钮不工作。我正在使用共享首选项: if (dialogPrefs.getBoolean("Show", true) == true) { new AlertDialog.Builder(this) .setTitle("Blah") .setMessage("Blah blah blah
不再显示
按钮不工作。我正在使用共享首选项:
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;
共享pref在onCreate()
中初始化
请让我知道可能是什么问题
谢谢
Ruchir
SharedReferences.Editor.commit()
返回一个布尔值,指示对实际SharedReferences对象的写入状态。查看commit()
是否返回true
。另外,请确保您没有使用两个编辑器编辑相同的SharedReference。最后提交的编辑器将反映其更改
更新当我运行代码时,您的代码工作正常。我看不出你的代码有任何错误。请确保您正在向同一共享参考文献写信和阅读
SharedReferences.Editor.commit()
返回一个布尔值,指示对实际SharedReferences对象的写入状态。查看commit()
是否返回true
。另外,请确保您没有使用两个编辑器编辑相同的SharedReference。最后提交的编辑器将反映其更改
更新当我运行代码时,您的代码工作正常。我看不出你的代码有任何错误。请确保您正在向同一共享参考文献写信和阅读 您的问题是
共享引用的声明
;它已全部声明,但…未初始化!操作系统应将键值数据写入何处
我建议你读一下这个
尝试此代码,我测试了它并运行:
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();
}
}
您的问题是
共享引用的声明
;它已全部声明,但…未初始化!操作系统应将键值数据写入何处
我建议你读一下这个
尝试此代码,我测试了它并运行:
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();
}
}
应该是这样的:
if (!dialogPrefs.getBoolean("Show", false)) {//don't show again will work
而不是:
if (dialogPrefs.getBoolean("Show", true) == true) {//this will always show dialog
应该是这样的:
if (!dialogPrefs.getBoolean("Show", false)) {//don't show again will work
而不是:
if (dialogPrefs.getBoolean("Show", true) == true) {//this will always show dialog
它已初始化,请看我答案的底部,我在开头声明了它。ruchir是的,它已声明但未初始化。哦,很抱歉,我忘记显示初始化。它实际上是在onCreate()中初始化的。我将编辑我的问题:)好的!发布完整的代码,这样我们就可以运行您的代码片段来帮助您!但是,即使尝试你的答案中所写的方式对我也不起作用。它是初始化的,请看我答案的底部,在那里我声明它是在开头声明的。ruchir是的,它是声明的,但不是初始化的。哦,很抱歉,我忘了显示初始化。它实际上是在onCreate()中初始化的。我将编辑我的问题:)好的!发布完整的代码,这样我们就可以运行您的代码片段来帮助您!但是,即使尝试在您的答案中所写的方式,我也不适用。请显示您如何在onCreate方法中初始化dialogPrefs和dialogEditor,或发布完整的代码请显示您如何在onCreate方法中初始化dialogPrefs和dialogEditor,或发布完整的代码