Ale*_*t83 1 android widget android-appwidget
我正在做一些 Android 练习,但我在小部件方面遇到了问题:
目标:当用户将新的小部件添加到主页时,应用程序运行一个配置,用户可以在其中选择一个字符串。在配置过程中,必须将该字符串设置为小部件布局内唯一按钮的“文本”,并且在该按钮上应用程序必须设置一个 onclick 侦听器,该侦听器将调用另一个将字符串作为参数传递的活动。因此,当用户单击按钮时,将调用提供按钮文本的活动。主要目标是,如果我有两个小部件,每个小部件都会设置 onclick 侦听器发送不同的字符串作为参数。
代码:
int mAppWidgetId = 0;
if (extras != null) {
mAppWidgetId = extras.getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}
String thestring = ... //this string is set dynamically by the configuration
RemoteViews views = new RemoteViews(this.getPackageName(), R.widget_profile);
views.setTextViewText(R.id.buttonWidget, thestring);
Intent clickIntent = new Intent(this, afterclickactivity.class);
clickIntent.putExtra("TheString", thestring);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, clickIntent, 0);
views.setOnClickPendingIntent(R.id.buttonWidget, pendingIntent);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
appWidgetManager.updateAppWidget(mAppWidgetId, views);
Run Code Online (Sandbox Code Playgroud)
问题:一切似乎都工作正常,小部件位于主屏幕中,按钮上的文本是用户选择的文本,如果我添加同一小部件的 2 个实例,它们根据用户选择具有不同的文本。但是,当用户按下第二个小部件上的按钮时,它会启动“afterclickactivity”,其参数与 widget1 相同,忽略第二个选择的字符串。
它像是:
小部件 1:文本:string1 onclick:callActivity(string1)
小部件 2:文本:string2 onclick:callActivity(string1)
小智 5
这是由 Intent 的比较方式造成的。PendingIntent 已在系统中注册,当您尝试添加另一个 PendingIntent 时,会检查是否与已注册的 PendingIntent 相等。使用 Intent.filterEquals 比较包含的 Intent,它检查 Intent 的操作、数据、类型、类和类别。如果已注册的 Intent 和新的 Intent 相同,则 PendingIntent 不会重复。它要么被替换,要么被保留(取决于参数、您的选择)。
请注意,此处不比较额外内容。
因此,您需要以某种方式区分意图,例如使用数据字段或请求代码。
请参阅此处有关 PendingIntent 的文档:http://developer.android.com/reference/android/app/PendingIntent.html
以及关于Intent本身的相关文档
帕维尔
| 归档时间: |
|
| 查看次数: |
622 次 |
| 最近记录: |