我在这里(和其他地方)阅读了几篇文章,描述了如何在启动应用程序时动态选择要显示的 Activity 。下面是我的代码:
AndroidManifest.xml
<activity android:name=".StartupActivity"
android:theme="@android:style/Theme.NoDisplay">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
启动 Activity .java
public class StartupActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Intent intent;
if (RandomClass.getSomeStaticBoolean())
{
intent = new Intent(this, ActivityOften.class);
}
else
{
intent = new Intent(this, ActivityRare.class);
}
startActivity(intent);
finish();
}
}
ActivityOften 和 ActivityRare 都在 list 中声明(当然没有启动器类别)并分别扩展 ListActivity 和 Activity。 99% 的时间第一个显示的 Activity 是基于 RandomClass.getSomeStaticBoolean() 的 ActivityOften。
因此,第一次从图标启动我的应用程序时,我进入了 StartupActivity.onCreate。选择是正确的。但是随后任何启动应用程序的尝试(从快捷方式或应用程序菜单)再次显示 ActivityOften。 StartupActivity 类中没有进一步的中断。尽管我知道 RandomClass.getSomeStaticBoolean() 已经改变了值并且 ActivityRare 应该出现,但第一个 Activity 仍然弹出。
有什么想法吗?
谢谢,Merci、Gracias、Danke、Grazie! 肖恩
最佳答案
这是因为您的应用程序 Activity 是从历史堆栈加载的。
在 ActivityOften
和 ActivityRare
的 list 中设置 android:noHistory=true
。那应该可以解决您的问题。
关于Android:动态选择启动 Activity 并不总是有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7511126/