0

ユーザーがいくつかのアプリ オプションを持つ MainActivity を作成し、グリッド メニューに表示して、後続の特定のアクティビティにアクセスします。ただし、アプリケーションの起動時に、ユーザーがログインの詳細を入力するために AlertDialog を使用し、グリッド レイアウト定義の直後に膨張させます。問題は、グリッド メニューでアイテムを選択するたびに (その結果、新しいアクティビティを選択するたびに)、AlertDialog が再びポップアップすることです。どうすればこれを回避できますか?

さらに、MainActivity の開始時 (またはおそらくログイン後) に開始する必要があるアップロード サービスがありますが、新しいアクティビティが呼び出されるたびに再起動する必要はありません。この問題は前の問題に関連していると思いますが、OptionsMenu から startService ボタンを使用して一時的に解決することができました。これは恒久的な解決策ではありません。

前もって感謝します。

編集:次のように getSharedPreferences を使用しようとしました:

private SharedPreferences prefs;
private String prefName = "MyPref";
int hasLoggedIn;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mm_gridmenu);

    SharedPreferences prefs = getSharedPreferences(prefName, MODE_PRIVATE);
    hasLoggedIn = prefs.getInt("hasLoggedIn", 0);

    if (hasLoggedIn == 0) {
        showDialog(SHOW_DIALOG);
        prefs = getSharedPreferences(prefName , MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putInt("hasLoggedIn", 1);
        editor.commit();
    }

ただし、この方法では hasLoggedIn 値が 1 として保存され、ダイアログが再びポップアップすることはありません。それを修正するために戻るボタンを設定しようとしましたが、これによりアプリが最小化されないようです。そのアクションをボタンに追加する方法はありますか? (ホームボタンにも複製します)

@Override
public void onBackPressed() {
    prefs = getSharedPreferences(prefName , MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putInt("hasLoggedIn", 0);
    editor.commit();
    Log.i("hasLoggedIn", hasLoggedIn + "");
    return;
}

さらに、このアクションはその後のアクティビティに影響を与えると思います (alertDialog をオンに戻します)。これに代わる有効なものはどれですか?

4

2 に答える 2

1

基本的に、アプリケーションの状態を追跡する必要があります。これを行うには、いくつかのオプションがあります。簡単な方法の 1 つは、a を使用して 、ユーザーがログインした後にこの値を に設定したSharedPreferencesようなものと呼ばれるブール変数を格納することです。メインアクティビティが起動するたびに、ユーザーの再ログインを要求するように設定されているかどうかの値を確認するだけです。すでに true の場合、ログイン ダイアログを表示しないhasLoggedIntruehasLoggedInfalse

于 2012-04-04T17:28:26.847 に答える
0

これを試すことができます: MainActivity にブール値フラグを追加します。

private boolean dialogFlag = true;

onCreate/onResume メソッドで:

if(dialogFlag) {
    createDialog();
    dialogFlag = false;
}

アプリがインストールされたらすぐにポップアップしたい場合は、このフラグをプロパティ ファイルに保存できます。そして、アプリを起動するたびに最初に読んでください。

于 2012-04-04T17:38:51.627 に答える