以编程方式定义默认活动(当应用程序启动时)
Posted
技术标签:
【中文标题】以编程方式定义默认活动(当应用程序启动时)【英文标题】:Define Default Activity (when app starts) programmatically 【发布时间】:2011-06-27 19:13:24 【问题描述】:我的应用程序由一些活动组成。
Activity A 是我的主菜单,带有一些图标。 此 Activity 可以根据您按下的图标启动:Activity B、C、D、E 或 F。
这很好,也很简单,Activity A 是默认的。
现在,我做了一个优先选项,允许用户开始他们最喜欢的活动。
例如,实际上有些用户更喜欢直接获取 Activity B。
我找到解决方案的唯一方法是在 Activity A 中执行此操作此解决方案非常丑陋,因为 Activity A 将始终自动启动和关闭:
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
settings = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
final Intent intent = getIntent();
String action = intent.getAction();
if (Intent.ACTION_MAIN.equals(action))
switch (Integer.valueOf(settings.getString("Activitypref", "1")))
case 2:
Intent i = new Intent(ActivityA.this, ActivityB.class);
finish();
startActivity(i);
break;
case 3:
i = new Intent(ActivityA.this, ActivityC.class);
finish();
startActivity(i);
break;
case 4:
i = new Intent(ActivityA.this, ActivityD.class);
finish();
startActivity(i);
break;
case 5:
i = new Intent(ActivityA.this, ActivityE.class);
finish();
startActivity(i);
break;
case 6:
i = new Intent(ActivityA.this, ActivityF.class);
finish();
startActivity(i);
break;
default:
break;
【问题讨论】:
如果 Activity A 的唯一目的是决定启动哪个其他 Activity,那么我不认为这是一个丑陋的解决方案。听起来 Activity A 正在完成它的工作。 是的,但用户可以选择“绕过”此活动并直接进入活动 X。当设置为首选项时,我不希望启动活动 A,除非用户按下我的主页按钮,在享受了 Activity X 之后。 最烦人的是加载时间和屏幕在启动 Activity A 并将其关闭到“onCreate”时闪烁 您可以创建一个扩展“应用程序”的类并让它决定启动哪个活动。在清单的“应用程序”选项卡的“应用程序属性”部分中,您必须将“名称”分配给扩展它的类的名称。由于它不应该处理 UI,因此它听起来像是 switch 语句的好地方。不过删除“finish()”调用。 【参考方案1】:考虑使用从启动器调用的包装器活动,而不是ActivityA
。您将无需检查 ACTION_MAIN。您还可以将目标活动名称存储在首选项中,并使用它通过不同的意图签名直接启动您的目标活动:
public Intent (String action)
<activity class=".StartActivity" android:label="...">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity class=".ActivityA" android:label="...">
<intent-filter>
<action android:name="mypackage.ActivityA" />
</intent-filter>
</activity>
在 StartActivity 中
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
settings = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
String action = settings.getString("Activitypref","mypackage.ActivityA");
Intent intent = new Intent(action);
startActivity(intent);
....
你可能需要稍微摆弄一下才能把它弄好。
【讨论】:
您好 ALex,您的解决方案似乎正是我正在寻找的,但不幸的是,我不明白您的意思.. 我觉得有点愚蠢,但你是一个小 sn-p 还是例子? 我添加了更新。我现在无法访问我的 Android 代码,因此您可能需要修改它以使其正确。 答案很好,但是你的 wrapper 就像我之前的 ACactivity A 一样,让屏幕闪烁一点(StartActivity 启动然后 ACtivityA)然后,我也需要完成它,这和之前完全一样,其实.. 您能否详细说明一下,我应该将什么值传递给startActivity()
方法?我正在尝试根据某些条件运行一项预定义的活动。以上是关于以编程方式定义默认活动(当应用程序启动时)的主要内容,如果未能解决你的问题,请参考以下文章