5

Od pewnego czasu borykam się z tym problemem. Mam widget, który wyświetla podsumowanie receptury gotowania. Widżet jest klikalny, więc za każdym razem, gdy użytkownik kliknie, otwiera się nowe działanie z pełnym opisem tego przepisu. Problem polega na tym, że czasami po kliknięciu widgetu otwiera się niewłaściwa aktywność. Podam przykład:Android: otwarcie niewłaściwej aktywności z widżetu

  1. kliknięć użytkowników na widget i aktywności A jest otwarty
  2. użytkownik rozpoczyna działalność B (np indeksu przepis) z działalności A.
  3. Użytkownik rozpoczyna działalność C z działalności B.
  4. Przycisk użytkownika Przycisk Home.
  5. użytkownik kliknie widget ponownie i aktywność C jest wyświetlany zamiast A

próbowałem ustawienie compibation tych trzech flag, które pomaga w rozwiązywaniu tylko połowa problemu:

openIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

stosując powyżej flagi udało mi się wyświetla prawidłową aktywność (a) aż do I wykonaj następujące czynności:

  1. Użytkownik otwiera aktywność a z widget
  2. Użytkownik przenosi się do działalności B i otwiera działalności dla klikając na nowej recepturze
  3. Nowy przepis jest wyświetlany użytkownikowi
  4. użytkownik kliknie przycisk Home i kliknięcia na widget.
  5. Aktywność A jest wyświetlana (prawy), ale z inną recepturą.
  6. Odtąd, jeśli przejdę do różnych działań B lub C i ponownie kliknę Home, a następnie widget, aktywność A nie zostanie wyświetlona, ​​ale ta, która była widoczna przed naciśnięciem przycisku Home.

Mam nadzieję, że wyjaśniłem to wystarczająco szczegółowo. Byłbym bardzo wdzięczny za twoją pomoc, ponieważ to doprowadza mnie do szału!

Aktualizacja:

To mój pendingIntent:

Intent openIntent = new Intent(context, ProfanityDefinition.class); 

openIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
openIntent.setData(Uri.parse(openIntent.toUri(Intent.URI_INTENT_SCHEME))); 

Bundle bundle = new Bundle(); 
bundle.putBoolean("widgetRequest", true); 
openIntent.putExtras(bundle); 
PendingIntent openPendingIntent = PendingIntent.getActivity(context, 0, openIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
views.setOnClickPendingIntent(R.id.widget_content, openPendingIntent); 

Dzięki

Odpowiedz

12

Pokaż kod służący do tworzenia PedningIntent. Jeśli przekazujesz dodatki do swojej działalności, pamiętaj, że dwa zamiary różniące się tylko dodatkami są traktowane jako równoważne. Prawdopodobnie chcesz przekazać PendingIntent.FLAG_CANCEL_CURRENT podczas tworzenia PendingIntent, aby upewnić się, że twoje zamiary nie zostaną ponownie wykorzystane.

+0

Ponieważ zadanie dla ciebie działa już działa, 'FLAG_ACTIVITY_NEW_TASK' spowoduje przeniesienie działającego działania na pierwszy plan. Ustaw 'android: taskAffinity =" "' w AndroidManifest.xml dla działania 'ProfanityDefinition', aby uruchomić go w oddzielnym zadaniu. Następnie dostaniesz nową instancję po kliknięciu widgetu. –

+0

To nie pomogło ... Nadal dostaję aktywność B zamiast A lub A z inną zawartością ... to jest dziwne – Marqs

+1

To działa, sprawdź swój kod. Czy używasz flagi Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP' jako flagi? A jaka jest nazwa klasy "działalności A"? –

Powiązane problemy