我有一个应用程序,可以收到多个紧急消息。收到每条消息后,需要打开一个包含紧急详细信息的对话框。如果收到多个紧急情况,它将堆叠对话框,以便在处理最近的紧急消息并关闭特定对话框时,应显示先前最近和未处理的紧急情况,就好像它们是堆叠的一样。
此外,每个紧急情况的详细信息每隔x秒从服务更新一次,这些更改需要进入正确的对话框实例,以便在屏幕上对话框是最新的。
我认为这是一种无效的方式。我将每个对话框片段对象的实例存储在列表中,并使用新的详细信息更新该实例,然后打开它。这意味着如果50个紧急情况被垃圾邮件发送,我会存储50个对话框。对记忆不太好。
此外,这种方法在方向方面效果不佳,对象被销毁并重新构建,它从我的列表中删除,细节还原为存储在其意图中的原始细节。
我正在寻找一种尽可能高效的方法,我想向你的集体Android大脑寻求建议。
我如何有效地管理同一对话框类的多个实例以获得我需要的行为?
答案 0 :(得分:1)
我要做的是在我的EmergencyMessage
中保留Activity
数据对象堆栈。当堆栈不为空时,我会显示新的DialogFragment
,并使用Fragment.setArguments从堆栈顶部传递EmergencyMessage
。
在我的DialogFragment
中,我会使用Fragment.getArguments来获取EmergencyMessage
对象并显示消息。当用户处理消息时,请通知您的活动(for example like this)并关闭对话框。然后,如果您的堆栈中仍有未处理的EmergencyMessages
,请重复此过程。
这样,您始终可以在任何给定时间激活单个DialogFragment
实例。
现在,关于更新EmergencyMessage内容,如果DialogFragment已经显示此消息,您可以通过以下活动进行:
创建对话框时,将其标记为“EmergencyMessageDialog”,以便稍后可以进行对话并与之交互。
MyDialogFragment dialog = (MyDialogFragment)
getFragmentManager().findFragmentByTag("EmergencyMessageDialog");
dialog.updateEmergencyMessage(newEmergencyMessage);
如果您收到尚未显示的EmergencyMessage更新,您只需在活动中更新堆栈中的EmergencyMessage对象,这样就很容易了。