Как завершить старую активность, когда поиск начинает новую активность - PullRequest
3 голосов
/ 04 августа 2011

У меня есть приложение, которое представляет своего рода каталог предметов в 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 таким образом, что если выполняется три или четыре поиска, для выхода требуется четыре или пять нажатий кнопки Назад.Не совсем желаемый эффект.:)

Я хотел бы, в некотором роде, завершить исходное действие, когда начинается второе действие, и, в идеале, объединить два класса (обзор и поиск) в один.Есть ли способ для моей активности обнаружить, что он уже запущен в другом процессе, и уничтожить этот другой процесс в начале?

Как только я пойму это, я, вероятно, пойму, как объединить эти два.Что делают другие, когда им нужно использовать отфильтрованный список?

Ответы [ 2 ]

3 голосов
/ 04 августа 2011

Если я понимаю, вы хотели бы очистить стек задних действий.Используйте флаги активности, когда вызываете поисковую активность.

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

Это страница разработчика о заднем стеке активности.

1 голос
/ 04 августа 2011

Чтобы завершить старую активность, когда поиск начинает новую активность, задайте финиш () в активности с более странным видом и вызовите новую активность. Intent intent = new (Intent(MainActivity.this,GPSActivity.class); startActivityForResult(intent, ACTIVITY_GPS);<br> finish();

В этом мы можем начать новую активность GPSActivity и завершить MainActivity.

...