如何在搜索启动新活动时结束旧活动

时间:2011-08-04 10:32:41

标签: android search listactivity searchable

我有一个应用程序,它在ListView中提供了一种项目目录。列表相当长,所以我实现了Search这样的功能:

    <activity android:name=".ItemsOverview"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <!-- enable the search dialog to send searches to ItemsSearch -->
        <meta-data android:name="android.app.default_searchable"
                   android:value=".ItemsSearch" />
    </activity>
...
...
    <activity android:name=".ItemsSearch">
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data android:name="android.app.searchable"
                   android:resource="@xml/searchable" />
    </activity>

ItemsSearch然后显示相同的ListView,但仅包含与搜索条件匹配的项目。

这有两个基本问题:

  1. ItemsSearch几乎与ItemsOverview重复(但对搜索功能有一些改进);
  2. ItemsSearch覆盖ItemsOverview,这样如果完成三次或四次搜索,则需要四次或五次按“后退”按钮才能退出。不太理想的效果。 :)
  3. 我希望以某种方式在第二个Activity开始时结束原始Activity,理想情况下,将两个类(Overview和Search)合并为一个。有没有办法让我的Activity检测到它已经在另一个进程中运行,并在开始时杀死其他进程?

    一旦我理解了这一点,我就可以弄清楚如何将两者结合起来。其他人在需要使用过滤列表时会怎么做?

2 个答案:

答案 0 :(得分:3)

如果我理解,您是否希望清除活动后退堆栈。在调用搜索活动时使用活动标记。

Intent intent = new Intent(this, Search.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

This is the developer page about the activity back stack.

答案 1 :(得分:1)

在搜索开始时结束旧活动新活动在旧活动中提供完成()并调用新活动。 Intent intent = new (Intent(MainActivity.this,GPSActivity.class); startActivityForResult(intent, ACTIVITY_GPS);
finish();

在此我们可以开始新的活动GPS活动并完成MainActivity。