Jak przenieść działanie na pierwszy plan (górę stosu)?
W Androidzie zdefiniowałem przykład aktywności.
Kiedy moja aplikacja została uruchomiona, powstała instancja tego działania A, powiedzmy, że jest to A
.
Gdy użytkownik kliknął przycisk w A
, powstała kolejna instancja B-Activity, B. Teraz stos zadań to B-A, Z B na górze. Następnie użytkownik kliknął przycisk na B, Inna instancja C-Activity I C został utworzony. Teraz stos zadań to C-B-A, Z C na górze.
Teraz, gdy użytkownik kliknie przycisk na C, chcę aplikacja do wyprowadzenia A na pierwszy plan, tzn. aby a było na szczycie stosu zadań, A-C-B.
Jak mogę napisać kod, aby to się stało?
9 answers
Możesz spróbować tego FLAG_ACTIVITY_REORDER_TO_FRONT
(dokument opisuje dokładnie to, co chcesz)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-16 03:18:16
Najlepszym sposobem, który znalazłem, aby to zrobić, było użycie tej samej intencji, z której korzysta Ekran główny Androida - Launcher aplikacji.
Na przykład:
Intent i = new Intent(this, MyMainActivity.class);
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);
W ten sposób, każda aktywność w moim pakiecie była ostatnio użyta przez użytkownika, jest ponownie przenoszona na front. Uznałem to za przydatne w korzystaniu z PendingIntent mojej usługi, aby przywrócić użytkownika do mojej aplikacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-18 00:23:40
Oto kod-przykład jak możesz to zrobić:
Intent intent = getIntent(getApplicationContext(), A.class)
To upewni się, że masz tylko jedną instancję aktywności na stosie.
private static Intent getIntent(Context context, Class<?> cls) {
Intent intent = new Intent(context, cls);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
return intent;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-13 11:36:59
FLAG_ACTIVITY_REORDER_TO_FRONT : Jeśli jest ustawiona w intencji przekazanej do kontekstu.startActivity(), flaga ta spowoduje, że uruchomiona aktywność zostanie przeniesiona na początek stosu historii zadania, jeśli jest już uruchomiona.
Intent i = new Intent(context, AActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-16 13:35:25
Myślę, że kombinacja Intent
FLAG powinna załatwić sprawę. W szczególności, Intent.FLAG_ACTIVITY_CLEAR_TOP
i Intent.FLAG_ACTIVITY_NEW_TASK
.
Dodaj te flagi do swoich zamiarów przed wywołaniem startActvity
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-16 03:19:02
i.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
Zwróć uwagę, że Twój launchmode startowy powinien być single_task
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-15 13:07:27
Ogólnie uważam, że ta metoda zarządzania aktywnością nie jest zalecana. Problem z reaktywacją aktywności dwa kroki w dół w stosie jest to, że aktywność ta została prawdopodobnie zabita. Moja rada, aby zapamiętać stan swoich działań i uruchomić je z startActivity ()
Jestem pewien, że widziałeś tę stronę, ale dla Twojej wygody ten link
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-16 03:19:58
Jeśli chcesz przenieść aktywność na górę stosu po kliknięciu powiadomienia, może być konieczne wykonanie następujących czynności, aby FLAG_ACTIVITY_REORDER_TO_FRONT działało:
Rozwiązaniem dla mnie było stworzenie odbiornika nadawczego, który nasłuchuje akcji nadawczych wyzwalanych przez powiadomienie. Więc w zasadzie:
Powiadomienie uruchamia akcję rozgłoszeniową z dodatkową nazwą aktywności do uruchomienia.
-
Odbiornik Radiowy po kliknięciu powiadomienia tworzy się zamiar uruchomienia tej aktywności przy użyciu flagi FLAG_ACTIVITY_REORDER_TO_FRONT
Aktywność jest przenoszona na szczyt stosu aktywności, bez duplikatów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-12 20:08:24
Jeśli używasz" Google Cloud Message "do otrzymywania powiadomień push z klasą" PendingIntent", poniższy kod wyświetla powiadomienie tylko na pasku akcji.
Kliknięcie powiadomienia nie spowoduje utworzenia żadnej aktywności, ostatnia aktywna aktywność zostanie przywrócona, zachowując aktualny stan bez problemów.
Intent notificationIntent = new Intent(this, ActBase.class);
**notificationIntent.setAction(Intent.ACTION_MAIN);
notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);**
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Localtaxi")
.setVibrate(vibrate)
.setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
.setAutoCancel(true)
.setOnlyAlertOnce(true)
.setContentText(msg);
mBuilder.setContentIntent(contentIntent);
NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-19 07:26:54