Обновляйте только текущий идентификатор виджета Android в методе обновления

Я делаю виджет в 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);
    }
}

Резюме:

Этот код является методом обновления и вызывается при щелчке виджета. Я хочу, чтобы этот метод обновлял только идентификатор виджета, который его вызвал, а не для того, чтобы этот метод обновлял идентификаторы всех виджетов на главном экране.

9
задан Jack Trowbridge 29 July 2012 в 08:46
поделиться