我有Tab Layout的活动。当活动开始时,我抓住我的位置的对象并设置活动标题,从本地联系人的数据中找到联系人照片uri并通过将该对象传递给片段来初始化片段。
物体的结构是这样的:
eventId : {
name: "Event Name",
contacts: {
-id1: {
name: "Foo",
email: foo@example.com
},
-id2: {
name: "Bar",
email: bar@example.com
}
},
// Other stuff
}
现在,该对象包含联系人和联系人列表,其中包含电子邮件地址。我通过搜索电子邮件地址从手机上的本地联系人数据加载联系人的照片URI,然后将其添加到该对象,然后再将其发送到片段进行初始化。因此,只要需要在屏幕上显示联系人的照片,这些片段就会显示联系人照片的详细信息。
现在,一个标签是一个片段,显示该事件的活动流并显示FirebaseUI RecyclerView。并且有来自eventId的联系ID的引用。因此,每当我有朋友参考时,我都会在屏幕上抓取事件对象的详细信息。
看起来像这样:
创建的活动 - >从Firebase接收事件数据 - >从当地联系簿获取Photo Uris - >更新对象 - >使用Object初始化选项卡片段(其中包含与照片uri的联系人详细信息)
但是如果朋友列表被更新并且新活动流引用了该对象当前未持有的联系人,则它将崩溃。
所以,我想要实现的是,每当更新新数据时,Activity都会获取新的Event对象,获取好友列表,找到联系人照片uris并将更新的对象发送到Fragments,以便他们现在可以参考新联系。
我能做到这一点的一种方法是在片段和活动中设置监听器。在更新联系人列表时,活动可以再次更新其对象。何时,数据更改片段要求活动提供新数据。但是,如果片段中的侦听器首先在片段中触发而不是活动,则活动可能会发送相同的数据,应用程序可能会崩溃。
我无法在片段中动态获取uri的东西是,有很多联系人并且每次都会提取它会影响滚动性能。
听众会怎样点火?按哪个顺序?
还是有更好更简单的方法吗?
感谢。