2014-03-01 108 views
0

我有一個小部件的多個實例。 當我點擊一個窗口小部件如預期配置活動啓動,該活動檢索相應的控件ID(我跟着this post解釋如何區分意圖):主頁按鈕後,配置活動中的小部件ID未更新

Intent configIntent = new Intent(context, WidgetConfigureDisplayActivity.class); 
configIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, configIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
views.setOnClickPendingIntent(R.id.mood_main_layout, pendingIntent); 

appWidgetManager.updateAppWidget(appWidgetId, views); 

所以一切工作正常,除了當我用家裏按鈕(而不是後面的那個)。
在主屏幕上,如果我單擊另一個窗口小部件實例,將顯示配置活動,但不會使用新的窗口小部件實例配置(附加中的窗口小部件ID未更改)進行更新。

Intent intent = getIntent(); 
Bundle extras = intent.getExtras(); 
if (extras != null) { 
    widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, 
     AppWidgetManager.INVALID_APPWIDGET_ID); 
} 

我相信FLAG_UPDATE_CURRENT標誌的目的是更新活動中的控件ID,但它似乎沒有工作(我試圖覆蓋onNewIntent,方法的onResume沒有運氣)。玩launchMode &其他標誌也沒有幫助。

回答

0

在配置意圖中添加FLAG_ACTIVITY_CLEAR_TOP修復了問題。

configIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

這時我只有一個活動,所以我不知道這是否是最佳的解決方案,或者如果這個標誌會破壞其他導航行爲。
任何想法將不勝感激。

0

當你按鈕後退按鈕活動被破壞。而當你從小部件再次調用它的新活動被調用的實例。但是當你按下home按鈕活動被銷燬時,它將保留在內存中並且舊實例被調用。所以最好的做法是在從小部件,服務或廣播中調用活動時添加標誌(FLAG_ACTIVITY_NEW_TASK)。

+0

添加FLAG_ACTIVITY_NEW_TASK並沒有幫助。我已經嘗試過了。正如我回答我的問題FLAG_ACTIVITY_CLEAR_TOP的作品。但我不明白爲什麼FLAG_ACTIVITY_NEW_TASK不起作用,依據文檔「在新任務中啓動活動」。如果某個任務已經在運行您正在啓動的活動,則該任務將以其最後狀態進入前臺恢復並且活動在onNewIntent()中接收新的意圖「,並且我在onNewIntent方法中沒有收到任何新的意圖。 –

相關問題