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 で文字列を比較するにはどうすればよいですか?を参照してください)。あなたの問題です。あなたの問題はあなたの小切手です

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

クリック リスナーでは実行されません。そうではないため、そのスレッド (ダイアログを表示するために新しいスレッドを生成すると想定しています) は実行を続けます。

また、このコードを移動する前に、

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

しかし、移動したときに再初期化しませんでした。現在、プリミティブのデフォルト値は false であるため、新しいコードでは、ダイアログ ボタンを押す前にチェックされ、新しいバージョンをコミットすることはありません。

私のアドバイスは、

accepted == true

肯定的なボタン クリックのリスナーに単純にブロックします。

于 2012-07-29T22:04:23.340 に答える