每次返回MainActivity时都会重新启动AlertDialog

时间:2012-04-04 17:22:12

标签: android service alertdialog android-activity

我创建了一个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)。哪个应该是有效的替代方案?

2 个答案:

答案 0 :(得分:1)

基本上你需要跟踪你的应用程序状态,你有几个选项可以做到这一点。一种简单的方法是在用户登录后使用SharedPreferences存储一个名为hasLoggedIn的布尔变量,将此值设置为true。每次启动主活动时,只需检查hasLoggedIn的值,如果其设置为false,则需要用户再次登录。如果已经存在,则不显示登录对话框

答案 1 :(得分:0)

你可以试试这个: 在MainActivity中添加一个布尔标志:

private boolean dialogFlag = true;
onCreate / onResume方法中的

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

如果您想在安装应用程序后立即弹出,可以将此标志保存到属性文件中。并在应用程序开始时首先阅读它。