Android:配置widget(不同widget实例的相同SetOnClickPendingEntertExtras)

Android:配置widget(不同widget实例的相同SetOnClickPendingEntertExtras),android,widget,android-appwidget,Android,Widget,Android Appwidget,我正在做一些安卓操作,我对小部件有一个问题: 目标:当用户向主页添加新的小部件时,应用程序将运行一个配置,用户可以在其中选择字符串。 在配置期间,该字符串必须设置为我的小部件布局中唯一按钮的“文本”,并且在该按钮上,应用程序必须设置一个onclick侦听器,该侦听器将调用另一个将该字符串作为参数传递的活动。因此,当用户单击按钮时,将调用提供按钮文本的活动。主要目标是,如果我有两个小部件,每个小部件都设置onclick侦听器,并发送不同的字符串作为参数 代码: int mAppWidgetId =

我正在做一些安卓操作,我对小部件有一个问题:

目标:当用户向主页添加新的小部件时,应用程序将运行一个配置,用户可以在其中选择字符串。 在配置期间,该字符串必须设置为我的小部件布局中唯一按钮的“文本”,并且在该按钮上,应用程序必须设置一个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);
问题:一切正常,小部件显示在主屏幕上,按钮上的文本是用户选择的文本,如果我添加了同一小部件的两个实例,则它们根据用户选择有不同的文本。但当用户按下第二个小部件上的按钮时,它会启动“afterclickactivity”,参数与widget1相同,忽略第二个choosen字符串

就像:

小部件1: 文本:string1 onclick:callActivity(string1)

小部件2: 文本:string2
onclick:callActivity(string1

它是由意图的比较方式引起的。PendingEvent已在系统中注册,当您尝试添加另一个PendingEvent时,将执行与已注册的PendingEvent是否相等的检查。使用Intent.filterEquals对包含的意图进行比较,后者检查意图的操作、数据、类型、类和类别。如果已经登记的意图与新意图相同,则不会复制PendingEvent。它被替换或保留(取决于参数,由您选择)

请注意,额外的在此不进行比较

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

请参阅此处有关PendingEvent的文档:

以及关于意图本身的相关文档

帕维尔