我有一个应用程序,它在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
,但只包含符合搜索条件的项。
这里有两个基本问题:
-
ItemsSearch
几乎是ItemsOverview
的复制品(但对搜索功能进行了一些增强); -
ItemsSearch
覆盖ItemsOverview
,这样如果完成了三到四次搜索,则需要按四到五次后退按钮才能退出。效果不太理想。:)
我想以某种方式,在第二个活动开始时结束原始活动,理想情况下,将两个类(Overview和Search)合并为一个。是否有一种方法可以让我的活动检测到它已经在另一个进程中运行,并在开始时杀死其他进程?
一旦我明白了这一点,我就可能知道如何将两者结合起来。当其他人需要使用过滤列表时,他们会怎么做?
如果我理解,你想清除活动返回堆栈。当你调用你的搜索活动时使用活动标志。
Intent intent = new Intent(this, Search.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
这是关于activity back stack的开发者页面
要在搜索开始时结束旧Activity,在旧Activity中调用finish()方法并调用新Activity。
Intent intent = new (Intent(MainActivity.this,GPSActivity.class);
startActivityForResult(intent, ACTIVITY_GPS);
finish();
在这里,我们可以启动新的活动GPSActivity,并完成MainActivity。