我正在尝试在首次运行应用时以及每次更新后弹出免责声明。我做了一堆谷歌搜索,并在这里回顾了一些问题,这就是我的代码:
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();
}
}
这段代码实际上起作用了,但是当我更改我的应用程序启动活动,并将此代码从原始启动活动移动到新启动活动时,它不再有效。免责声明出现在每次运行中。
我希望弹出窗口仅在首次运行和更新后显示。我需要做什么才能实现这一目标?
,我感到非常沮丧和困惑,因为它工作正常。答案 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
只需在您的监听器中阻止正向按钮单击。