8

私のアプリケーションは、いくつかのアクティビティで構成されています。

アクティビティ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;
        }
    } 
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 に答える