Android: несколько экземпляров активности запущены с одинаковым намерением. Вывести однозначно на передний план? - PullRequest
3 голосов
/ 15 ноября 2010

Я борюсь с моим приложением, которое запускает несколько экземпляров та же активность с использованием того же намерения. Моя основная деятельность относится к классу A и он выполняет startActivity () двух дочерних тип класса B. Итак, мы запустили B1 и B2. Если B1 и B2 оба приостановлено (нажатием кнопки назад и убедившись, что Finish () не вызывается на них, чтобы они действительно остановились), как A однозначно может принести либо B1 или B2 снова на передний план? Я хочу начать новый B-вид деятельности. я хочу однозначно вывести B1 или B2 на передний план.

так что B1 и B2 были созданы так ... Намерение намерение = новое намерение (контекст, B.class); intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK); startActivity (намерение);

Теперь я хочу, чтобы A вывел B1 (или B2) на передний план / фронт, поэтому я использую код ниже, но как отличить B1 или B2 при запуске деятельность? Это приносит только последний экземпляр B, который был на вершине передний план.

Намерение намерения = новое намерение (контекст, B.class); intent.addFlags (Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity (намерение);

Я пытался хранить ссылки на B1 и B2 и что-то делать как это, но это также относится только к последнему виду деятельности класс B, который был на вершине ...

Намерение намерения = новое намерение (B1context, B.class); intent.addFlags (Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); B1context.startActivity (намерение);

Я даже попробовал это, но это все равно не дает мне мой уникальный B1 или B2 ... Intent intent = B1.getIntent (); // то есть первоначальное намерение начал меня startActivity (намерение); // до сих пор выводит только последний B, который был на вершине.

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 15 ноября 2010

Спасибо. Это оба хорошие предложения. Я думал о создании C, который расширяет B. В моем приложении я хотел сделать что-то очень общее, так как у меня есть n экземпляров B. Это не установленный номер. Я подумывал сделать 10-20 из этих простых подклассов в AndroidManifest.xml, а затем управлять ими по мере их уничтожения, чтобы я мог использовать их снова.

Я не знал, но похож на идею подкласса. Хорошо, что есть еще одна возможность подумать.

Мне кажется очень странным, что в Android не очевидно, как справиться со стеком истории проще, чем прибегать к хитростям. Здесь есть все, кроме уникального идентификатора Activity в стеке.

0 голосов
/ 20 февраля 2013

вот решение:

Intent mIntent1 = new Intent(this, Activity1.class);
mIntent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
Intent mIntent2 = new Intent(this, Activity2.class);
Intent[] list = new Intent[2];
list[0] = mIntent1;
list[1] = mIntent2;
startActivities(list);
0 голосов
/ 15 ноября 2010

В принципе, вы не можете.Цель NEW_TASK - запускать отдельные «приложения» так, как их видит пользователь.Если вы используете это, чтобы пытаться манипулировать потоком через ваше приложение, вы злоупотребляете им (и ломаете такие вещи, как недавние задачи и т. Д.).

Вы можете обойти это, сделав их фактическими отдельными классами через подклассы, нопрежде чем делать это, пожалуйста, остановитесь и подумайте, действительно ли то, что вы делаете здесь, действительно правильно.Существует только несколько мест, где следует использовать NEW_TASK - пусковые установки, переключатели из уведомлений и т. Д. Во всех этих случаях существует довольно уникальная идентичность того, к чему запускает пользователь.Все, что вы делаете, должно поддерживать эту семантику.

...