Почему мой виджет приложения "Домашний экран Android" не работает должным образом?

Я работаю над виджетом домашнего экрана для приложения чата. Я создал Провайдер виджетов и WidgetConfigurationActivity. Когда я создаю виджет Home, в конфигурации отображается весь доступный чат для зарегистрированного пользователя, и когда один из них выбран, виджет должен отображаться как изображение другого пользователя чата. Затем PendingIntent должен открыть правильный ChatActivity. Для этого мне нужны 3 строковых значения, которые я могу восстановить из своего База данных Firebase:

  • ImageThumb - URL-адрес образа хранилища Firebase
  • ChatterUserName - имя другого собеседника
  • list_user_id - Uid чата, из которого будут извлекаться сообщения База данных

Вот мое репозиторий GitHub

Я сохраняю 1 строку как SharedPref и 2 как Бумажная библиотека.

Когда я создаю первый виджет, все работает нормально.

Я извлекаю все строки, создаю правильный RemoteView и собираюсь открыть правильный чат с правильными данными.

Проблема возникает, когда я создаю второй виджет.

Изображение второго виджета правильное, но когда я нажимаю на него, открывается ChatActivity для первого виджета.

Я вошел в систему, чтобы убедиться, что все данные получены правильно

08-14 04:37:07.899 27778-27778/com.example.alessandro.mychatapp D/Constraints: onUpdate: appWidgetId: 331, listUserId: kcL4c30lnjhU36TBqhgJQox4dVk1, userName: Dj Maru, userThumb: https://firebasestorage.googleapis.com/v0/b/mychatapp-8a476.appspot.com/o/profile_images%2Fthumbs%2FkcL4c30lnjhU36TBqhgJQox4dVk1.jpg?alt=media&token=9a748bfe-1f39-44fa-9c29-38d5e60aaa86
08-14 04:37:07.910 27778-27778/com.example.alessandro.mychatapp D/Constraints: updateAppWidget: appWidgetId: 331, user_id: kcL4c30lnjhU36TBqhgJQox4dVk1, userName: Dj Maru, image: https://firebasestorage.googleapis.com/v0/b/mychatapp-8a476.appspot.com/o/profile_images%2Fthumbs%2FkcL4c30lnjhU36TBqhgJQox4dVk1.jpg?alt=media&token=9a748bfe-1f39-44fa-9c29-38d5e60aaa86
08-14 04:37:07.917 27778-27778/com.example.alessandro.mychatapp D/Constraints: onUpdate: appWidgetId: 332, listUserId: 9saSiY1WT0PNt6derLMsGBcZvJh2, userName: redjack, userThumb: https://firebasestorage.googleapis.com/v0/b/mychatapp-8a476.appspot.com/o/profile_images%2Fthumbs%2F9saSiY1WT0PNt6derLMsGBcZvJh2.jpg?alt=media&token=28d1b36c-6c43-454e-9ecd-cafca9cee994
08-14 04:37:07.920 27778-27778/com.example.alessandro.mychatapp D/Constraints: updateAppWidget: appWidgetId: 332, user_id: 9saSiY1WT0PNt6derLMsGBcZvJh2, userName: redjack, image: https://firebasestorage.googleapis.com/v0/b/mychatapp-8a476.appspot.com/o/profile_images%2Fthumbs%2F9saSiY1WT0PNt6derLMsGBcZvJh2.jpg?alt=media&token=28d1b36c-6c43-454e-9ecd-cafca9cee994

Я также проверил значения mAppWidgedId в WidgetConfigurationActivity, чтобы убедиться, что новый идентификатор был создан с новым виджетом.

Затем если я выключу или перезапущу свое устройство, первый виджет перестает работать… а второй работает нормально.

Кто-нибудь может помочь мне понять, что не так в моем коде и как это исправить? Большое спасибо. Любые предложения приветствуются.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
177
1

Ответы 1

Вместо setOnClickPendingIntent вы должны использовать views.setPendingIntentTemplate (...) в провайдере, а затем иметь уникальное поведение onclick для каждого из ваших элементов в виджете, тогда вам нужно установить fillInIntent для каждого элемента в адаптере где вы заполняете каждый элемент.

Вот ссылка от разработчиков Google: https://developer.android.com/guide/topics/appwidgets

Если у вас есть другие вопросы, пожалуйста, задавайте их :)

С уважением, Ласло

Другие вопросы по теме