2012-04-04 12 views
0

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

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

ありがとうございます。しかし

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として保存され、ダイアログは決してポップなかっアップ再びこのよう:

EDIT:次のように私はgetSharedPreferencesを使用しようとしました。私はそれを修正するために戻るボタンを設定しようとしましたが、これはアプリケーションが最小化されないように思われます。そのアクションをボタンに追加する方法はありますか? (私は同様にホームボタンを複製することになる)

@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を設定)、その後の活動に影響を与えると確信しています。これは有効な代替手段ですか?

+0

コードを貼り付けてください...あなたの問題を解決する方法を予測できません。 – Cristian

+0

@Cristian、コードを見てからご意見はありますか?ありがとう。 – Cath

答えて

1

基本的には、アプリケーションの状態を把握する必要があります。これにはいくつかのオプションがあります。 1つの簡単な方法はSharedPreferencesを使用して、ユーザーがログインした後hasLoggedInなどのブール型変数を保存することです。この値をtrueに設定します。あなたのメインアクティビティが起動するたびに、falseに設定されている場合は、ユーザーが再度ログインする必要がある場合は、hasLoggedInの値を確認してください。それはすでにtrueの場合、ダイアログ

+0

それは素晴らしい考えです、どうして私はそれを考えなかったのですか?ありがとう、私はそれを試してみよう! – Cath

+0

私はまだsharedPreferencesをマスターしていません。私は現在のコードで質問を編集します。 – Cath

+0

あなたは新しい問題を私に助けてくれますか? @slayton – Cath

0

でログを表示しないあなたはこれを試すことができます: はあなたのMainActivityでブールフラグを追加します。のonCreate/onResumeメソッドで

private boolean dialogFlag = true; 

を:

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

アプリがインストールされた直後にポップアップを表示する場合は、このフラグをプロパティファイルに保存できます。アプリが始動するたびにまずそれを読んでください。

+0

新しいオブジェクトが生成されるため、アクティビティが再開される前にMainActivityオブジェクトが破棄され、フラグは 'true'のデフォルト値になります。 – slayton

+0

はい、そのようなことが起こった場合、状態を保持するマネージャクラスを作成する必要があります。 – Javatar

+0

これを行うために 'SharedPrefernces'がすでに存在するのはなぜですか? – slayton