0

我试图在应用程序首次运行时和每次更新后弹出免责声明。我做了一堆谷歌搜索并在这里查看了一些问题,这就是我的代码的样子:

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();
    }
}

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

我希望弹出窗口仅在首次运行和更新后显示。我需要做什么才能实现这一目标?我非常沮丧和困惑,因为它正在工作,然后没有。

4

1 回答 1

3

将字符串与 .equals() 进行比较是正确的方法(请参阅:我如何比较 Java 中的字符串?以获得一个很好的解释),尽管因为我不确定 android 内部是如何工作的,而你之前说过它是这样工作的,但那不是你的问题。你的问题是你的支票

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

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

我还假设在您移动此代码之前,您已经声明了

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

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

我的建议是把里面的内容

accepted == true

只需阻止您的听众点击正面按钮即可。

于 2012-07-29T22:04:23.340 回答