Я делаю виджет в Android, который при нажатии выдает случайное число. Когда виджет один на главном экране, он работает отлично, однако, когда вы добавляете несколько виджетов, они начинают генерировать случайные числа одновременно. Что происходит, так это то, что когда щелкают отдельный виджет, он обновляет их все; в результате получается много случайных чисел. Я хочу, чтобы каждый виджет был изолирован от других; в основном, когда виджет нажимается, он обновляет только себя, а не другие вокруг него. Я думаю, что это достижимо, если получить идентификатор текущего виджета и обновить только его, в отличие от метода обновления, обновляющего все виджеты; Как мне это сделать?
Мой код
@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);
}
}
Резюме:
Этот код является методом обновления и вызывается при щелчке виджета. Я хочу, чтобы этот метод обновлял только идентификатор виджета, который его вызвал, а не для того, чтобы этот метод обновлял идентификаторы всех виджетов на главном экране.