Android:配置小部件(不同小部件实例的setOnClickPendingIntent额外内容相同)

时间:2013-08-25 08:17:15

标签: 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);

问题: Everythings似乎工作正常,小部件位于主屏幕上,按钮上的文字是用户选择的文本,如果我添加2个相同小部件的实例根据用户选择,它们具有不同的文本。但是当用户按下第二个小部件上的按钮时,它会使用与widget1相同的参数启动“afterclickactivity”,忽略第二个选择的字符串。

就像:

小工具1: text:string1 onclick:callActivity(string1)

小工具2: text:string2 onclick:callActivity( string1

1 个答案:

答案 0 :(得分:1)

这是由Intent的比较方式引起的。 PendingIntent在系统中注册,当您尝试添加另一个时,检查是否已执行已注册的那些。使用Intent.filterEquals比较Contained Intent,它会检查Intent的动作,数据,类型,类和类别。如果已注册的Intent和新注册的Intent相同,则PendingIntent不会重复。它被替换或离开(取决于参数,您的选择)。

请注意,此处不会比较 extras

因此,您需要以某种方式区分意图,例如通过使用数据字段或请求代码。

请在此处查看有关PendingIntent的文档:http://developer.android.com/reference/android/app/PendingIntent.html

关于Intent本身的相关文档

的Pavel