在 Android App 中使用代码设置启动 Activity
Posted
技术标签:
【中文标题】在 Android App 中使用代码设置启动 Activity【英文标题】:Set starting Activity with code in Android App 【发布时间】:2012-11-11 03:47:42 【问题描述】:我是开发 android 应用程序的新手。 我知道如何使用 AndroidManifest.xml 设置启动 Activity,但我需要一种方法在选择启动 Activity 之前先检查一些内容。
我的问题: 我创建了一个 loginActivity 和一个 mainActivity。 我想做以下事情:如果我登录,我会将标志设置为 1,并且在下一次应用启动时,我想直接显示 mainActivity 而不是登录。
有没有办法做到这一点?我考虑过创建一个启动画面,我可以在其中检查我是否在显示第一个 Activity 之前登录。
谢谢,菲利普
更新的代码 - 工作:
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
// get preferences
SharedPreferences userDetails = getApplicationContext().getSharedPreferences("userdetails", 0);
String savedEmail = userDetails.getString("email", "");
String savedPassword = userDetails.getString("password", "");
Boolean savedRemember = userDetails.getBoolean("remember", false);
Boolean savedLogged = userDetails.getBoolean("logged", false);
// check if already logged in
if(savedLogged)
// start the overview
Intent intent = new Intent(this, ActivityOverview.class);
startActivity(intent);
finish();
else
// initialize the form layout
setContentView(R.layout.activity_login);
// get views
this.email = (EditText)findViewById(R.id.editTextEmail);
this.password = (EditText)findViewById(R.id.editTextPassword);
this.remember = (CheckBox)findViewById(R.id.checkBoxRemember);
// set values to views
this.email.setText(savedEmail);
this.password.setText(savedPassword);
this.remember.setChecked(savedRemember);
【问题讨论】:
【参考方案1】:我的一个应用中有类似的东西。我让用户选择天气是否应该自动登录。这保存在SharedPreferences
。
当应用程序启动并在主页中时,您应该检查 - BEFORE setContentView(R.layout.activity_login);
并在 startActivity();
之后设置 finish();
if(savedLogged)
Intent intent = new Intent(this, ActivityOverview.class);
startActivity(intent);
finish();
setContentView(R.layout.activity_login);
【讨论】:
【参考方案2】:你真的不需要启动画面。
当用户成功登录您的应用时,将 SharedPreferences 中的布尔标志设置为 true。检查登录活动的onCreate()
中的此标志是否为真,如果是,请使用Intent
启动主活动。
【讨论】:
【参考方案3】:您不需要显示您的活动。不确定您的代码流到底是什么,但您可以安全地开始,即使用 LoginActivity。在您的onCreate()
中检查您是否已登录(无论对您意味着什么),如果是,请立即启动 MainActivity,使用 finish()
杀死 LoginActivity。
【讨论】:
感谢您的快速回答,我知道了(请参阅我第一篇文章中的代码)。它工作正常,但是当我启动应用程序时,我会在新屏幕出现之前看到登录屏幕一小段时间。 Activity Layout 初始化之前是否有事件发生? 在致电setContentView()
之前进行检查。还要修复您的代码,以便将 finish();
称为 AFTER startActivity();
所以现在我做到了(见更新的帖子#1)。它工作得很好,但在短时间内其他活动也是可见的,但我认为不会有人看到。谢谢【参考方案4】:
使用闪屏是个好主意。启动 loginActivity 将在瞬间显示登录屏幕。这是不可取的。
【讨论】:
是的,我现在用那个试过了,那是我的问题。如果我从登录屏幕开始,它看起来不太好..以上是关于在 Android App 中使用代码设置启动 Activity的主要内容,如果未能解决你的问题,请参考以下文章
AndroidMac下Android Studio设置App启动页