2010-11-05 52 views
4

我有一個包含4個按鈕來顯示4個股票價格的小部件,他們每個人都會啓動到相同的活動Quote.class來顯示股票細節。在onUpdate()中,它將用股票符號設置額外的pendingIntent。當我點擊按鈕A後,它會顯示股票A的報價活動。然後,我按返回按鈕到主屏幕,報價活動調用onDestroy(),當我點擊按鈕B時,股票B將正常顯示。但是,當它顯示股票A後,當我點擊HOME按鈕時,報價活動只調用onStop而不調用onDestroy(),然後當我點擊按鈕B時,它將調用onStart()並顯示顯示股票A的相同實例。Android - 當使用不同額外功能從小部件啓動相同的活動時,如何防止從HOME按鈕返回後顯示相同的實例?

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.etappwidget); 
setQuoteIntent(context, views, R.id.view1, "BAC", 1); 
setQuoteIntent(context, views, R.id.view2, "C", 2); 
setQuoteIntent(context, views, R.id.view3, "GOOG", 3); 
setQuoteIntent(context, views, R.id.view4, "AAPL", 4); 

private static void setQuoteIntent(Context context, RemoteViews views, int viewId, String symbol, int requestCode) { 
Intent i = new Intent(context, Quote.class); 
i.putExtra("SYMBOL", symbol); 
i.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 
PendingIntent pi = PendingIntent.getActivity(context, requestCode, i, PendingIntent.FLAG_UPDATE_CURRENT); 
views.setOnClickPendingIntent(viewId, pi); 

}

原本我以爲在Intent把一個標誌應該解決這個問題。但我試過 i.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK或FLAG_ACTIVITY_NEW_TASK或FLAG_ACTIVITY_NO_HISTORY),它們都沒有任何區別。

那麼有什麼方法可以使它工作嗎?我怎樣才能從HOME按鈕中刪除歷史堆棧?我怎樣才能在報價活動中創建並在按下按鈕B時獲得新的額外功能?任何幫助表示讚賞。由於

回答

2
  • 這是正常onDestroy到可能沒有得到,如果你做簡單的任務切換(如持有HOME鍵)調用。如果您需要清理,則需要進入。
  • 我相信問題是你有一個PendingIntent,只是有所不同。 PendingIntents被緩存,所以如果你使用兩個相同的動作和數據,它們會相互覆蓋。你可以通過給每個隨機數據來規避這種情況。嘗試在數據中傳遞符號而不是通過額外的(這是首選)。
+0

究竟應該如何傳遞數據?你的意思是使用intent.setData(Uri uri)方法嗎? – nickyfantasy 2010-11-05 16:48:03

+0

是的。爲股票創建自己的簡單Uri。 – EboMike 2010-11-05 17:04:12

+0

它適用於隨機數據嗎?我的方法來避免緩存掛起的意圖是對不同的按鈕/小部件使用不同的意圖名稱。 – xandy 2010-11-06 10:10:18

0

當你按回家時,最有可能的活動不會被破壞。在這種情況下,暫停狀態。所以,我想你的代碼啓動股票視圖將駐紮在onCreate而不是onResume。所以,將這些移動到onResume應該可以解決問題。

+0

我已經嘗試在onResume而不是onCreate中調用getIntent()。getStringExtra(「Symbol」)。但是,當我點擊小部件中的其他按鈕時,它每次仍會獲得符號A.看起來像同樣的額外將停留在那裏。無論如何要替換一個新的額外?我應該做什麼onStop()也許? – nickyfantasy 2010-11-05 16:54:26

0

如果您在Intent中使用了不同的Action,並使用SingleTop或類似的標誌並重寫onNewIntent來檢測應該執行該操作的正確操作。您需要準備好處理onCreate和onNewIntent的意圖。

1

你可以試試這個:

 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 

您的活動不會在歷史堆棧中可以看出

1
clickIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 

自:API級別1如果設置,新的活動沒有保持在 歷史堆棧。只要用戶離開它, 活動就完成了。這也可以使用noHistory 屬性進行設置。

這解決了我在實現小部件活動時遇到的同樣的問題。

相關問題