Android中的动态启动活动?

问题描述:

有没有一种方法可以根据条件动态更改Android中的开始活动?我试图做(没有工作)是以下几点:Android中的动态启动活动?

  1. 删除在我的AndroidManifest.xml
  2. 定义创建一个自定义应用程序类应用程序使用
  3. 覆盖的发射器类别我的应用程序类的onCreate方法定义如下的一些代码:

if (condition) { 
    startActivity(new Intent(this, MenuActivity.class)); 
} else { 
    startActivity(new Intent(this, LoginActivity.class)); 
} 
+3

正是我所搜索的,谢谢你已经问过这个问题。 – mad 2011-02-14 08:38:54

为什么不能有一个初步的Activity没有用户界面,检查条件的onCreate,然后启动下一个Activity,然后在本身调用finish()?我从来没有从onCreate()内拨打过finish(),所以我不确定这是否可行。

编辑
似乎工作正常。这里有一些代码可以使它更清晰。
初始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() 
} 

其他Activity

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 
+0

你有没有用户界面的活动?我认为活动的重点是向用户展示一些东西,但也许我需要重新阅读Android基础知识...... – 2011-01-31 22:00:44

+1

@Matt Huggins我只是在我的临时工作区尝试过它,它似乎工作正常。 – 2011-01-31 22:08:54

这是我亲自做我的小的移动项目之一。而不是创建一个单独的,画面不太Activity中条件并启动相应的屏幕,我把情况一Activity,做了动态setContentView(),如:这种方法

if (!userIsLoggedIn) { 
    setContentView(R.layout.signup); 
} else { 
    setContentView(R.layout.homescreen); 
} 

两个重要注意事项:

1:不要在onCreate()中编写该文件,而应该在onResume()的范围内进行决策,因为只要屏幕需要显示在前面,就会始终调用后者。你可以从Android activity life cycle看到。因此,例如,如果用户刚刚下载我的应用程序并首次启动它,因为没有用户登录,她将被引导至注册页面。当她完成注册并由于某种原因按下HOME按钮(不是BACK,完全退出应用程序!),然后恢复应用程序,她将看到的布局已经是主屏幕。如果我在onCreate()内部添加条件,那么会显示的是注册屏幕,因为根据生命周期,当将应用程序返回到前台时,它不会返回到onCreate()

2:该解决方案只有在合并这两个活动的功能时才是理想的,不会产生长长的恶魔般的代码块。就像我说的,我的项目是一个小型项目(其主要功能发生在后台),因此单个动态项目没有太多内容。无屏幕的Activity绝对是如果你需要你的代码更易于阅读的方式。