2012-07-31 16 views
0

我是Android新手, 我正在使用配置活動幫助更新Widget上的TextView。它工作正常。相同的文本視圖需要更新以刷新按鈕點擊。爲此,我通過Intent傳遞Widget ID,但在接收端無法接收小部件ID,因此Text視圖無法更新。Android意圖putExra數據不適用於獵犬方

設置的意圖,在Widget_Provider

Intent refreshIntent = new Intent(context, refreshWidgetActivity.class); 
refreshIntent.setAction(ACTION_WIDGET_REFRESH); 
PendingIntent refreshPendingIntent = PendingIntent.getActivity(context, 0, 
refreshIntent, 0); 
remoteViews.setOnClickPendingIntent(R.id.button3, refreshPendingIntent); 
refreshIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,appWidgetIds[0]); 

在收到活動結束,

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

if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) { 
finish(); 
} 

這裏0是額外的,而不是控件ID找到,請幫助。

+2

logcat error =? – 2012-07-31 08:37:55

+1

在此發佈您的整個LOGCAT。 – 2012-07-31 08:47:15

+0

不,在LogCat中看到的錯誤 – rmimran 2012-07-31 08:49:48

回答

0

您是否在創建PendingIntent之前嘗試致電putExtra

像這樣:

Intent refreshIntent = new Intent(context, refreshWidgetActivity.class); 
refreshIntent.setAction(ACTION_WIDGET_REFRESH); 
refreshIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,appWidgetIds[0]); 
PendingIntent refreshPendingIntent = PendingIntent.getActivity(context, 0, 
refreshIntent, 0); 
remoteViews.setOnClickPendingIntent(R.id.button3, refreshPendingIntent); 
+0

偉大的兄弟,它工作正常。 Thanx很多,其簡單,但我浪費了兩天對它 – rmimran 2012-07-31 09:37:48

+0

沒有問題,男子 – henrikpersson 2012-07-31 09:44:20

+0

對不起兄弟,再次問題。第一次配置活動檢索Widget ID與在Refresh按鈕上檢索到的不同,因此Widget的Text View未更新。對於配置活動它的47&刷新按鈕它的7 – rmimran 2012-07-31 10:17:21

0

我認爲你必須管理的一些標誌。

如果我正確理解你的問題,你試圖更新你的活動中的數據傳遞額外的東西。

您沒有爲您的意圖設置任何標誌。另外,我不知道你的意圖在哪裏以及它是如何啓動的。但是,對於同一種在我自己的應用程序的問題,我用這個解決方案:

我把我的意圖有兩個標誌:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); 

這樣,我的意圖將推出一個新的任務(FLAG_ACTIVITY_NEW_TASK),那麼它會將其清除爲其根狀態(FLAG_ACTIVITY_CLEAR_TOP)(請參閱來源以瞭解原因)。

然後,我的PendingIntent設置取消當前,以確保有啓動(無需更多的我認爲)只有一個實例

PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

這樣一來,新的意圖將推出新的任務,清除以前的所有數據,並採取新的任務。 PendingIntent不是無用的重複。

它適用於我的情況,我認爲它應該爲你的工作。如果可以添加任何增強功能,請告訴我。

來源:http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP