2010-11-02 49 views
19

我有一个ListActivity和一个MapActivity。我想在应用程序启动时启动这些活动中的一个,这些活动是由用户在首选项窗口中选择的。根据用户的喜好,我可以在启动时启动不同的活动吗?

到目前为止,我看到启动应用程序启动的活动的唯一方式是使用应用程序清单文件中指定它...

<activity android:name=".MyActiivty" 
     android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
    </activity> 

我想我可能要开始,做一个活动只不过是看用户的喜好,然后启动ListActivity或MapActivity。看起来像是一种浪费,让一项活动除了发起另一项活动外什么都不做。在我的研究中,我没有找到解决这个问题的办法。任何建议将不胜感激。

感谢&问候, 戴夫

+0

我认为这是唯一的办法。只要一切都在onCreate这个调度活动中完成,包括调用finish(),我不认为它太浪费了 – 2010-11-02 07:19:24

回答

18

首先,不要创造出一些第三个活动。只需将LAUNCHERActivity作为列表或地图,并在需要时调用setContentView()之前,在onCreate()的另一个上调用startActivity()(加上finish())。这样,〜50%的时间,你就开始了正确的活动。

原则上,您可以让两个活动都有LAUNCHER<intent-filter>,只启用一个活动。但是,这不适用于桌面快捷方式,该快捷方式将转到特定的活动(无论哪个人在创建快捷方式时发生了配置)。如果这不涉及你,你可能会走这条路。但是,请尝试使用少量设备和自定义主屏幕进行测试 - 我不确定是否每个人都会立即接受您的更改。

+0

感谢您的好评。我会用你的第一个解决方案,因为我相信大多数用户将他们的默认设置为ListView。另外,我并没有完全理解第二种选择,但首先听起来绰绰有余。完全实施后,我会在一两周内发布更新。 – Dave 2010-11-03 02:15:27

+0

我刚添加.. – Dave 2010-11-11 03:23:56

5

我只是将下面的代码添加到了onCreate()方法,它像一个魅力一样工作。

Intent intent; 

    intent = new Intent(this, MyMap.class); 
    startActivity(intent); 
    finish(); 
0

对于新人(我),以下是dave的回答,以及我需要对AndroidManifest.xml进行的更改。

主要活动:

Intent intent; 

intent = new Intent(this, DisplayMessageActivity.class); 
startActivity(intent); 

修改xml文件,从 - >http://developer.android.com/training/basics/firstapp/starting-activity.html

的AndroidManifest.xml:

<activity 
     android:name="com.mycompany.myfirstapp.DisplayMessageActivity" 
     android:label="@string/title_activity_display_message" 
     android:parentActivityName="com.mycompany.myfirstapp.MyActivity" > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.mycompany.myfirstapp.MyActivity" /> 
    </activity>