android - 更新同一对话 fragment 的多个实例

标签 android android-fragments dialog

我有一个可以接收多条紧急消息的应用程序。当收到每条消息时,它需要打开一个包含紧急详细信息的对话框。如果收到不止一个紧急情况,它将堆叠对话框,以便在处理最新的紧急消息并关闭该特定对话框时,应该显示前一个最近的和未处理的紧急情况,就像它们被堆叠一样。

此外,每个紧急情况的详细信息每 x 秒从服务更新一次,并且这些更改需要进入正确的对话实例,以便在屏幕上显示时对话是最新的。

我认为我的工作方式效率不高。我将每个对话框 fragment 对象的实例存储在一个列表中,并用新的细节更新该实例,然后打开它。这意味着如果有 50 个紧急情况被发送垃圾邮件,我将存储 50 个对话。不利于内存。

此外,此方法在方向上效果不佳,对象被销毁并重建,它被从我的列表中删除,详细信息恢复为存储在其 Intent 中的原始详细信息。

我正在寻找一种尽可能高效的方法来做到这一点,我想向你们的集体 Android 大脑征求建议。

我如何有效地管理同一对话框类的多个实例以获得我需要的行为?

最佳答案

我要做的是在我的 Activity 中保存 EmergencyMessage 数据对象堆栈。当堆栈不为空时,我将显示新的 DialogFragment,并使用 Fragment.setArguments 从堆栈顶部将其传递给 EmergencyMessage .

在我的 DialogFragment 中,我会使用 Fragment.getArguments获取 EmergencyMessage 对象并显示消息。当用户处理消息时,通知您的 Activity ( for example like this ) 并关闭对话框。然后,如果您的堆栈中仍有未处理的 EmergencyMessages,只需重复该过程即可。

这样一来,您在任何给定时间始终只有一个 DialogFragment 实例处于 Activity 状态。

现在,如果 DialogFragment 已经显示此消息,关于更新 EmergencyMessage 内容,您可以通过这样的 Activity 来完成:

当您创建对话框时,将标签“EmergencyMessageDialog”传递给它,以便稍后检索对话框并与之交互。

MyDialogFragment dialog = (MyDialogFragment)
    getFragmentManager().findFragmentByTag("EmergencyMessageDialog");
dialog.updateEmergencyMessage(newEmergencyMessage);

如果您收到尚未显示​​的 EmergencyMessage 更新,您只需更新 Activity 堆栈中的 EmergencyMessage 对象,这样会很容易。

关于android - 更新同一对话 fragment 的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20141309/

相关文章:

android - Youtube API key

android - NavigationView 内的 ExpandableListView

java - Google Map getMapAsync 无法在 fragment 中使用

android - 附加/分离与替换 fragment

JavaScript 安全错误

Android:在 ListView 中使用之前修改来自 Content Provider 的数据

安卓工作室 : Snapshot Dependencies Don't Update properly

android - Android Studio-无法解析:com.android.support:appcompat-v7.22.2.0

user-interface - 用vue实现全局对话框

javascript - 在XPage上添加JQuery对话框的方法