我创建了一个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)。哪个应该是有效的替代方案?
答案 0 :(得分:1)
基本上你需要跟踪你的应用程序状态,你有几个选项可以做到这一点。一种简单的方法是在用户登录后使用SharedPreferences
存储一个名为hasLoggedIn
的布尔变量,将此值设置为true
。每次启动主活动时,只需检查hasLoggedIn
的值,如果其设置为false
,则需要用户再次登录。如果已经存在,则不显示登录对话框
答案 1 :(得分:0)
你可以试试这个: 在MainActivity中添加一个布尔标志:
private boolean dialogFlag = true;
onCreate / onResume方法中的:
if(dialogFlag) {
createDialog();
dialogFlag = false;
}
如果您想在安装应用程序后立即弹出,可以将此标志保存到属性文件中。并在应用程序开始时首先阅读它。