5

我一直在努力解決這個問題一段時間了。我有一個顯示烹飪食譜摘要的小部件。這個小部件是可點擊的,所以無論何時用戶點擊它,新的活動都會以該配方的完整描述打開。問題在於,有時點擊小部件時會打開錯誤的活動。我給大家舉一個例子:Android:打開錯誤小部件的活動

  1. 小部件和活動的用戶點擊打開
  2. 用戶從活動開始A.活動B(例如配方指數)
  3. 用戶從活動開始B.活動Ç
  4. 用戶按下主頁按鈕。
  5. 用戶點擊該小部件再次顯示,而不是一個

我嘗試設置這三個標誌,這有助於解決僅僅是問題的一半的compibation活性C:

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

通過使用上述標誌我設法顯示正確的活動(A),直到我執行以下操作:

  1. 用戶從微件打開活性的
  2. 用戶移動到活動B和點擊新配方
  3. 新配方被顯示給用戶
  4. 用戶打開活動A點擊小部件Home鍵和點擊。
  5. 顯示活動A(正確的),但是具有不同的配方。
  6. 從現在開始,如果我移動到不同的活動B或C,然後單擊主頁,然後再次點擊小部件,則不會顯示活動A,而會顯示在按下主頁按鈕之前可見的活動。

我希望我解釋得足夠詳細。我會很感激你的幫助,因爲這件事讓我發瘋了!

更新時間:

這是我的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); 

感謝

回答

12

顯示用於創建PedningIntent的代碼。如果您將附加項目傳遞給您的活動,請注意兩個僅以附加項目不同的意圖被視爲等同項目。當您創建PendingIntent時,您可能想要通過PendingIntent.FLAG_CANCEL_CURRENT以確保您的意圖不被重複使用。

+0

由於您的任務活動已在運行,因此「FLAG_ACTIVITY_NEW_TASK」只會將運行活動置於前臺。在AndroidManifest.xml中爲'ProfanityDefinition'活動設置android:taskAffinity =「」',使其在單獨的任務中運行。然後,您將獲得一個新實例來點擊小部件。 –

+0

這沒有幫助...我仍然得到活動B,而不是A或A與不同的內容...這很奇怪 – Marqs

+1

它的工作原理,檢查你的代碼。您是否使用Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP'作爲標誌? '活動A'的類名是什麼? –