Estoy haciendo un widget en Android que produce un número aleatorio al hacer clic. Cuando el widget está solo en la pantalla de inicio, funciona perfectamente; sin embargo, cuando agrega varios de ellos, comienzan a generar números aleatorios al mismo tiempo. Lo que sucede es que cuando se hace clic en un widget individual, se actualizan todos; dando como resultado muchos números aleatorios. Lo que quiero es que cada widget esté aislado de los demás; Básicamente, cuando se hace clic en un widget, solo se actualiza a sí mismo y no a los demás a su alrededor. Creo que esto se puede lograr al obtener el ID del widget actual y actualizarlo solo, ya que se opuso al método de actualización actualizando todos los widgets; ¿Cómo hago esto?Actualice el ID de widget de Android actual en el método de actualización
Mi código
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// Get all ids
ComponentName thisWidget = new ComponentName(context,
MyWidgetProvider.class);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
for (int widgetId : allWidgetIds) {
// Create some random data
int number = (new Random().nextInt(100));
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
R.layout.widget_layout);
Log.w("WidgetExample", String.valueOf(number));
// Set the text
remoteViews.setTextViewText(R.id.update, String.valueOf(number));
// Register an onClickListener
Intent intent = new Intent(context, MyWidgetProvider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.update, pendingIntent);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
}
Resumen:
Este código es el método de actualización y se llama cuando se hace clic en un widget. Quiero que este método solo actualice la identificación del widget que lo llamó, no para que este método actualice todos los ID de los widgets en la pantalla de inicio.
Gracias por esto, resolvió un error muy irritable. Lo más importante es colocar el único RequestCode en la llamada getBroadcast() o getActivity() para obtener el intento pendiente y evitar su reutilización tal como se explicó. Usar appWidgetId parece funcionar bien para eso. –
¿qué significa el último parámetro de PendingIntent.getBroadcast()? No hay const FLAG con valor 0. – cn123h
OK, probé FLAG diferente, ninguno de ellos funciona. Como Andrew y hasanghaforian mencionaron, el segundo parámetro, requestCode debe ser único para cada instancia de widget. – cn123h