2011-06-27 11 views
7

私のアプリケーションはいくつかのアクティビティで構成されています。デフォルトアクティビティの定義(アプリケーション起動時)プログラムで

アクティビティ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; 
     } 
    } 
+1

アクティビティAの唯一の目的は、起動する他のアクティビティを決定することですが、これは醜い解決策ではありません。アクティビティAがその仕事をしているようです。 – DeeV

+0

はい、ユーザーはこのアクティビティを「バイパス」してアクティビティXに直接進むことができます。プリファレンスに設定した場合、アクティビティXを楽しんだ後で、自分のホームボタンを押したとき以外はアクティビティAを起動しません。 –

+0

最も厄介なことは、読み込み時間とアクティビティAを開始して画面を点滅させて "onCreate"に閉じることです。 –

答えて

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

にあなたがする必要があるかもしれませんそれを正しいものにするためにちょっとの周りを練習してください。

+0

こんにちはALEX、あなたのソリューションは、私が探しているものとまったく同じですが、残念ながら、私はあなたが何を意味するのか分かりません。私はちょっと愚かではありますが、小さなスニペットや例ですか? –

+0

私はアップデートを追加しました。私は今Androidコードにアクセスすることができないので、正しいものにするためにそれを試す必要があるかもしれません。 –

+1

回答は素晴らしいですが、私の以前のACtivity Aのようなものですし、画面を少し点滅させるようにしてください(StartActivityはACtivityAを起動します)。これを完了する必要もあります。実際には前と全く同じです。 –

関連する問題