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

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

于 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 回答