显示弹出一次?

时间:2016-02-28 19:56:36

标签: java android database string algorithm

我正在尝试显示弹出窗口,如果用户点击不再显示,我想再也不会显示它。但是,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

3 个答案:

答案 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