3

我有一个应用程序,它在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,这样如果完成了三到四次搜索,则需要按四到五次“返回”按钮才能退出。不太理想的效果。:)

我想以某种方式在第二个活动开始时结束原始活动,理想情况下,将两个类(概述和搜索)合并为一个。有没有办法让我的 Activity 检测到它已经在另一个进程中运行,并在开始时杀死那个另一个进程?

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

4

2 回答 2

3

如果我理解,您想清除 Activity Back Stack。调用搜索活动时使用活动标志。

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

这是关于活动回栈的开发者页面。

于 2011-08-04T11:03:28.623 回答
1

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

在此我们可以启动新的 Activity GPSActivity 并完成 MainActivity。

于 2011-08-04T11:26:24.977 回答