2011-06-27 61 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.如果设置为偏好,我不希望活动A在用户按下我的主页按钮之后启动,但享受活动X. –

+0

最烦人的是加载时间和屏幕闪烁whan启动活动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

答案是伟大的,但你的wripper就像我以前的ACtivity A,并使屏幕闪烁一点(StartActivity启动,然后ACtivityA),那么,我也需要完成它,这是相当相同的,然后,其实.. –

相关问题