Различение экземпляров виджетов приложений в событиях нажатия в Android Xamarin - PullRequest
0 голосов
/ 30 мая 2018

У меня проблема с привязкой событий кликов к виджету приложения с Xamarin Android.Клики работают и запускают действие, но информация, переданная для дифференциации виджетов, не работает.Похоже, что одно и то же намерение регистрируется для всех экземпляров виджета.

Ниже приведен сокращенный пример кода, выполняющего привязку кликов из службы.Полный код также обновляет текст на виджетах.Эта часть работает нормально и отличается для каждого экземпляра виджета, поэтому я считаю, что общий шаблон обновления правильный.Это оставляет меня с намерением / ожиданием связывания намерения в качестве проблемы.Что-то не так с шаблоном, который я использую ниже?

public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
{
    var manager = AppWidgetManager.GetInstance(this);
    var ids = intent.GetIntArrayExtra(AppWidgetManager.ExtraAppwidgetIds);

    foreach (var id in ids)
    {
        var widgetView = new RemoteViews(PackageName, Resource.Layout.SingleRateWidget);
        var activityIntent = new Intent(this, typeof(ExchangesActivity));
        activityIntent.SetFlags(ActivityFlags.ClearTop | ActivityFlags.NewTask);
        activityIntent.PutExtra("WidgetId", id);
        var pendingIntent = PendingIntent.GetActivity(this, 0, activityIntent, PendingIntentFlags.UpdateCurrent);
        widgetView.SetOnClickPendingIntent(Resource.Id.widgetBackground, pendingIntent);
        manager.UpdateAppWidget(id, widgetView);
    }

    return StartCommandResult.Sticky;
}

Спасибо.

1 Ответ

0 голосов
/ 30 мая 2018

После дополнительного поиска я нашел исправление в вопросе разработки Java Android здесь:

Несколько экземпляров только виджета Обновление последнего виджета

Краткий ответ, изменитесоздание ожидающего намерения для этого:

var pendingIntent = PendingIntent.GetActivity(this, id, activityIntent, PendingIntentFlags.UpdateCurrent);

Длинный ответ, Android не видит разницы в ожидающем намерении, поэтому каждый раз повторно использует одно и то же ожидающее намерение.Наличие намерения с PutExtra недостаточно для дифференциации действий.Установив requestCode для идентификатора виджета, можно сделать уникальными ожидающие намерения.Другой вариант - сделать SetData для намерения действия с уникальным URI (используя идентификатор виджета приложения), но проще просто использовать requestCode в ожидающем намерении.

...