ユーザーがいくつかのアプリ オプションを持つ 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 をオンに戻します)。これに代わる有効なものはどれですか?