java - 为什么我的 Android 主屏幕应用小部件无法正常工作?
问题描述
我正在为聊天应用程序开发主屏幕小部件。我创建了一个Widget Provider和一个WidgetConfigurationActivity。When I create an Home widget the configuration show all the available chat for the logged user and when one is selected the widget should appear as an image of the other chat user. A PendingIntent然后应该打开正确的ChatActivity。为此,我需要 3 个可以从Firebase 数据库中恢复的字符串值:
- ImageThumb - Firebase 存储图像的 url
- ChatterUserName - 其他聊天者的名称
- list_user_id - 从数据库中检索消息的聊天的 Uid
我将 1 个字符串保存为SharedPref,将 2个字符串保存为Paper Library。
当我创建第一个小部件时,一切正常。
我检索所有字符串,创建正确的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
我还检查了 WidgetConfigurationActivity 中的mAppWidgedId值,以确保使用新小部件创建了新 Id。
然后,如果我关闭或重新启动我的设备,第一个小部件停止工作……而第二个工作正常。
有人可以帮助我了解我的代码中有什么问题以及如何解决它?非常感谢。欢迎任何建议。
解决方案
而不是 setOnClickPendingIntent,您必须在提供程序中使用 views.setPendingIntentTemplate(...),然后为小部件中的每个项目具有唯一的 onclick 行为,然后您必须为适配器中的每个项目设置一个 fillInIntent您填充每个项目的位置。
这是来自 Google Developers 的链接:https ://developer.android.com/guide/topics/appwidgets
如果您还有其他问题,请随时问我:)
最好的问候,拉斯洛
推荐阅读
- swiftui - ZoomableScrollView 不再适用于 SwiftUI
- python - 旋转时PIL切断图像?
- xcode - Xcode 13:构建挂起并显示“iPhone 正忙:让 Apple Watch 为开发做好准备”
- python - 如何在多类分类问题中显示具有预测的某个类的图像?
- windows - 如何使用 cmd 删除 Windows 目录?
- javascript - 帖子不按顺序排列。想在顶部显示最新的帖子
- c# - 在 Excel Web 插件开发 Visual Studio 中使用项目应用程序设置
- python - 如何将 csv 文件读取到 numpy 数组,包括第 0 个索引中的列名
- swift - 这种 Swift 语法的长格式
- javascript - MaterialUI 值道具在值状态更改后不更新组件的动态渲染