Ответ 1
Установка следующих флагов может помочь вам решить проблему:
-
Intent.FLAG_ACTIVITY_CLEAR_TOP
-
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
В моем PoC у меня есть некоторые действия, HomeActivity
, CreateActivity
, SearchActivity
, ResultsActivity
, ResultDetailsActivity
и UpdateActivity
.
У меня есть два основных пути навигации: Создать и Поиск.
Навигация для пути Создать выглядит следующим образом: HomeActivity
→ CreateActivity
- (при завершении) → HomeActivity
Навигация для Поиск выглядит следующим образом: HomeActivity
→ SearchActivity
→ ResultsActivity
(ListActivity
) → ResultDetailsActivity
→ UpdateActivity
- (по завершении) → ResultDetailsActivity
(с обновленными данными).
В настоящее время переход на новый Activity
осуществляется с помощью метода startActivity(intent)
. Однако это приводит к открытию нескольких экземпляров каждого Activity
.
Я новичок в Android. Может кто-нибудь, пожалуйста, предложите, как я мог бы избежать этого?
Установка следующих флагов может помочь вам решить проблему:
Intent.FLAG_ACTIVITY_CLEAR_TOP
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
В манифесте андроида добавьте в тег <activity>
android:launchMode="singleTask"
Для получения полного списка проверьте документацию о деятельности
В вашем манифесте:
<activity android:name=".YourActivity"
android:launchMode="singleTask"
android:label="@string/app_name" />
Примечание: не используйте singleton.
Используйте флаг Intent
, если startActivity
:
Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
существует много видов флага.
Это будет полезно: андроидный однопользовательский режим
Лучшей формой управления действиями является использование
startActivityForRestult (Intent, ID)
С помощью этого метода для вызова Activities ваша HomeActivity может управлять результатом для других действий в методе переопределения
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
}
Вы можете отправить известный результат для разных действий и управлять им. Например:
(Allways with startActivityForResult)
HomeActivity → SearchActivity → ResultsActivity (ListActivity) → ResultDetailsActivity → UpdateActivity - (полностью) → ResultDetailsActivity (с обновленными данными). Нажмите "Возврат" и отправьте SEARCH_fINISHED → UpdateActivity уловить это и отправить тот же результат в методе onActivityResult и закончить() → То же самое с searchActivity → Home
Это тоже может помочь:
Intent.FLAG_ACTIVITY_CLEAR_TOP
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
http://blog.akquinet.de/2010/04/15/android-activites-and-tasks-series-intent-flags/
Немногие вещи, чтобы добавить ответ, отправленный JoonSung Kim, измените метод addFlag, который будет бросать "не может разрешить ошибку"
изменить: intent.addFlag(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
to: intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
код должен быть:
Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
Чтобы предотвратить одновременное изменение нескольких экземпляров одного и того же действия, флаг
from: intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
to: intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
код должен быть:
Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);