Mat*_*ins 47 android launcher android-intent android-activity
有没有办法根据条件动态更改Android中的启动活动?我试图做的(不起作用)如下:
.
if (condition) {
startActivity(new Intent(this, MenuActivity.class));
} else {
startActivity(new Intent(this, LoginActivity.class));
}
Run Code Online (Sandbox Code Playgroud)
dav*_*e.c 59
为什么没有一个初始Activity没有UI来检查其中的条件onCreate,然后启动下一个Activity,然后finish()自己调用?我从来没有叫finish()从内部onCreate()的,所以我不知道这是否会工作.
编辑
似乎工作正常.这里有一些代码可以让它更清晰.
初始Activity:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent;
if (condition) {
intent = new Intent(this, ClassA.class);
} else {
intent = new Intent(this, ClassB.class);
}
startActivity(intent);
finish();
// note we never called setContentView()
}
Run Code Online (Sandbox Code Playgroud)
其他Activity:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
Run Code Online (Sandbox Code Playgroud)
这是我个人为我的一个小型移动项目所做的事情.不是创建一个单独的,无屏幕Activity的条件,并启动相应的屏幕,我把条件放在一个Activity并做了一个动态setContentView(),如:
if (!userIsLoggedIn) {
setContentView(R.layout.signup);
} else {
setContentView(R.layout.homescreen);
}
Run Code Online (Sandbox Code Playgroud)
这种方法的两个重要注意事项:
1:onCreate()你不想把它写进去,而是要把决策放在内部,onResume()因为只要屏幕需要在前面显示,就会调用后者.您可以从Android 活动生命周期中看到.因此,例如,如果用户刚刚下载了我的应用并首次启动它,因为没有用户登录,她将被引导到注册页面.当她完成注册并出于某种原因按下HOME按钮(不是BACK,完全退出应用程序!)然后恢复应用程序,她将看到的布局已经是主屏幕了.如果我把条件设置在内部onCreate(),那么显示的是注册屏幕,因为根据生命周期,它不会onCreate()回到将应用程序带回前面时.
2:只有在合并这两个活动的功能不会产生长的恶魔代码块时,此解决方案才是理想的选择.就像我说的,我的项目很小(它的主要功能发生在后台),因此单个动态Activity没有太多内容.Activity如果您需要您的代码更易于阅读,那么无屏幕绝对是您的选择.
| 归档时间: |
|
| 查看次数: |
13512 次 |
| 最近记录: |