我的应用程序是由一些活动组成。
活动A是我的一些图标主菜单。 这个活动可以根据其启动图标,你preSS:活动B,C,D,E或F
这很好,真的很容易,活动A是默认的。
现在,我取得了preference,使用户可以启动自己喜爱的活动一个选项。
有些用户会在实际上preFER获得直接b活动的实例。
我找到了解决的唯一途径是做到这一点的活动一个该解决方案是非常难看,因为活动A将始终启动并自动关闭:
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
设置= preferenceManager
.getDefaultShared preferences(getBaseContext());
最终意向意图= getIntent();
串动= intent.getAction();
如果(Intent.ACTION_MAIN.equals(动作)){
开关(Integer.valueOf(settings.getString(活动$ P $粉煤,1))){
案例2:
意图I =新的意图(ActivityA.this,ActivityB.class);
完();
startActivity(ⅰ);
打破;
案例3:
I =新的意图(ActivityA.this,ActivityC.class);
完();
startActivity(ⅰ);
打破;
壳体4:
I =新的意图(ActivityA.this,ActivityD.class);
完();
startActivity(ⅰ);
打破;
壳体5:
I =新的意图(ActivityA.this,ActivityE.class);
完();
startActivity(ⅰ);
打破;
情况6:
I =新的意图(ActivityA.this,ActivityF.class);
完();
startActivity(ⅰ);
打破;
默认:
打破;
}
}
解决方案
而不是 ActivityA
中,可以考虑使用包装的活动被称为从发射。你将消除需要检查ACTION_MAIN。你也可以在preferences存储目标活动的名字,并用它通过不同的意图签名直接启动您的目标的活动:
公共意向(串动)
<活动类=机器人StartActivity。:标签=...>
<意向滤光器>
<作用机器人:名称=android.intent.action.MAIN/>
<类机器人:名称=android.intent.category.LAUNCHER/>
&所述; /意图滤光器>
< /活性GT;
<活动类=机器人ActivityA。:标签=...>
<意向滤光器>
<作用机器人:名称=mypackage.ActivityA/>
&所述; /意图滤光器>
< /活性GT;
而在StartActivity
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
设置= preferenceManager
.getDefaultShared preferences(getBaseContext());
串动= settings.getString(活动preF,mypackage.ActivityA);
意向意图=新的意图(动作);
startActivity(意向);
....
}
您可能需要反复折腾一点得到它的权利。
My application is composed by a few activity.
Activity A is my main menu with some icons. This Activity can launch depending on which icon you press: Activity B,C,D,E or F.
That's fine and really easy, Activity A is the default one.
Now, I made an option in preference that allow users to start their favourite activity.
Some users will in fact prefer to get directly Activity B for instance.
The only way I found a solution was to do this in Activity A This solution is very ugly because Activity A will always launch and close automatically:
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;
}
}
解决方案
Instead of ActivityA
, consider using wrapper activity to be called from launcher. You will eliminate a need for checking for ACTION_MAIN. Also you can store target activity name in preferences and use it to directly start your target activity via different intent signature:
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>
And in 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);
....
}
You may need to fiddle around little bit to get it right.
相关推荐
最新文章