每次运行都会显示一次性AlertDialog

时间:2012-07-29 21:22:38

标签: android alertdialog

我正在尝试在首次运行应用时以及每次更新后弹出免责声明。我做了一堆谷歌搜索,并在这里回顾了一些问题,这就是我的代码:

SharedPreferences pref = getSharedPreferences("Preferences", MODE_PRIVATE);
SharedPreferences.Editor edit = pref.edit();
String lver = pref.getString("Version", "");
String ver = this.getString(R.string.version);
if(ver != lver)
{
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Disclaimer")
        .setMessage(this.getString(R.string.disclaimer))
        .setCancelable(false)
        .setPositiveButton("Accept", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                accepted = true;
                dialog.cancel();
            }
        })
        .setNegativeButton("Decline", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                MainMenu.this.finish();
            }
        });
    AlertDialog disc = builder.create();
    disc.show();
    if(accepted == true)
    {
        edit.putString("Version", this.getString(R.string.version));
        edit.commit();
    }
}

这段代码实际上起作用了,但是当我更改我的应用程序启动活动,并将此代码从原始启动活动移动到新启动活动时,它不再有效。免责声明出现在每次运行中。

我希望弹出窗口仅在首次运行和更新后显示。我需要做什么才能实现这一目标?

,我感到非常沮丧和困惑,因为它工作正常。

1 个答案:

答案 0 :(得分:3)

将字符串与.equals()进行比较是正确的方法(请参阅:How do I compare strings in Java?以获得一个很好的解释),虽然因为我不确定android内部是如何工作的,而且你之前说过它有效,那就不是'你的问题。你的问题是你的支票

if (accepted == true) {/** code */}

未在点击侦听器上运行。因为它不是,那个线程(我假设它产生了一个新线程来显示对话框)继续运行。

我在你移动这段代码之前也假设你宣布了一个

boolean accepted = true; //or initialized it to true somewhere

但是当你移动它时,你没有重新初始化它。现在,因为基元的默认值为false,所以在新代码中,它会在您按下对话框按钮之前进行检查,并且永远不会提交新版本。

我的建议将放在

accepted == true

只需在您的监听器中阻止正向按钮单击。