2012-07-31 17 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