我的申请由一些活动组成。
活动A是我的主菜单,带有一些图标。 此活动可以根据您按下的图标启动:活动B,C,D,E或F.
这很好,很容易,活动A是默认的。
现在,我首选了一个选项,允许用户开始他们喜欢的活动。
有些用户实际上更喜欢直接获取活动B.
我找到解决方案的唯一方法是在活动A中执行此操作此解决方案非常难看,因为活动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;
}
}
答案 0 :(得分:8)
考虑使用从启动器调用的包装器活动而不是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);
....
}
你可能需要摆弄一点点才能做到正确。