Android launchMode:singleTask覆盖

时间:2011-11-05 03:24:42

标签: android android-manifest

我有两个活动Main和SearchEvent活动。 Main活动有一个launchmode:“singleTask”,没有任何与SearchEvent活动相关的特殊参数。

当我单击Main活动中的按钮时,SearchActivity活动将在前台启动并显示事件列表。当我点击其中一个列表项时,这些项应该获取eventId并启动Main.class活动,但由于Main.class已经存在于堆栈中,它会放在顶部但是杀死了SearchActivity(我看到onDestroy方法被称为。)

我不希望调用SearchEvent的onDestroy方法,只是SearchEvent活动进入后台并弹出Main活动。

此外,如果我尝试使用launchMode =“singleTop”,它会启动另一个我不想要的Main活动实例。

我启用什么设置来启动Main的同一个实例并在后台移动SearchEvent?

清单文件中的代码。

MainActivity

<activity
        android:configChanges="orientation"
        android:launchMode="singleTask"
        android:name=".Main"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.CustomDialog" >
        <intent-filter >
            <action android:name="android.intent.action.VIEW" />
        </intent-filter>
        <intent-filter >
            <action android:name="android.intent.action.SEND" >
            </action>

            <category android:name="android.intent.category.DEFAULT" >
            </category>

            <data android:mimeType="image/*" >
            </data>
        </intent-filter>
        <intent-filter >
            <action android:name="android.intent.action.SEND" >
            </action>

            <category android:name="android.intent.category.DEFAULT" >
            </category>

            <data android:mimeType="video/*" >
            </data>
        </intent-filter>
    </activity>
    <activity>

SearchEvent代码

<activity
            android:configChanges="orientation"
            android:label="@string/app_name"
            android:name="SearchEvent"
            android:screenOrientation="portrait"
            android:theme="@style/Theme.CustomDialog1" >
            <intent-filter >
                <action android:name="android.intent.action.VIEW" />
            </intent-filter>
        </activity>

该代码用于首次调用主要活动。

Intent mainIntent = new Intent(SignIn.this, Main.class);
startActivity(mainIntent);

从主要活动调用SearchEvent的代码

Intent searchActivity = new Intent(Main.this, SearchEvents.class);
startActivity(searchActivity);

从SearchEvents活动再次调用主要活动的代码

Intent mainIntent = new Intent(SearchEvents.this, Main.class);
startActivity(mainIntent);

1 个答案:

答案 0 :(得分:0)

如果搜索活动应该向用户显示事件列表并让用户选择一个,然后使用此结果调用主活动,您可能希望以不同的方式执行此操作。

如果我理解正确,您可能希望主要活动使用startActivityForResult()启动搜索活动,并让搜索活动在完成时使用setResult()将所选事件返回到主活动。通过这种方式,搜索活动不必再次启动主活动,它只是“回到它”。