繁体   English   中英

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

[英]AlertDialog restarted each time I return to MainActivity

我创建了一个 MainActivity,其中用户有几个应用程序选项,显示在网格菜单中,可以访问后续的特定活动。 但是,当应用程序启动时,我使用 AlertDialog 供用户输入登录详细信息,它在网格布局定义之后膨胀。 问题是,每次我 select 网格菜单中的一个项目(以及一个新活动)时,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)。 哪个应该是一个有效的替代方案?

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

你可以试试这个:在你的 MainActivity 中添加一个 boolean 标志:

private boolean dialogFlag = true;

在 onCreate/onResume 方法中:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM