我是Android新手, 我正在配置Activity的帮助下更新Widget上的TextView。它工作正常。需要更新相同的文本视图以刷新按钮单击。为此,我通过Intent传递Widget ID但在接收器端无法接收小部件ID,因此无法更新Text视图。
在Widget_Provider中设置Intent
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中找到的,请帮忙。
答案 0 :(得分:0)
您是否尝试在创建putExtra
之前调用PendingIntent
?
像这样:
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);
答案 1 :(得分:0)
我认为你必须管理一些旗帜。
如果我正确理解了您的问题,那么您正在尝试更新“活动”中的数据并传递额外内容。
您没有为您的Intent设置任何FLAG。另外,我真的不知道你的Intent在哪里以及它是如何发布的。但是,对于我自己的应用程序中的同类问题,我使用此解决方案:
我用两个标志设置了我的意图:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
通过这种方式,我的Intent将启动一个新任务(FLAG_ACTIVITY_NEW_TASK),然后它会将其清除为根状态(FLAG_ACTIVITY_CLEAR_TOP)(参见来源了解原因)。
然后,我的PendingIntent设置为取消当前,以确保只启动了一个实例(我认为不需要更多)
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
通过这种方式,新的Intent将启动一个新任务,清除所有以前的数据并采用新的任务。 PendingIntent没有无用的重复。
它适用于我的情况,我认为它适用于你的。如果可以添加任何增强功能,请告诉我。
资料来源:http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP