8

我的应用程序由一些活动组成。

活动 A 是我的主菜单,带有一些图标。此活动可以根据您按下的图标启动:活动 B、C、D、E 或 F。

这很好,也很简单,活动 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;
        }
    } 
4

1 回答 1

9

而不是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);
    ....
}

你可能需要稍微摆弄一下才能把它弄好。

于 2011-06-27T19:25:55.980 回答