2013-11-22 51 views
2

我有一个可以接收多个紧急消息的应用程序。当收到每条消息时,需要打开一个包含紧急情况的对话框。如果收到多个紧急情况,它将堆叠对话框,以便在处理最近的紧急消息并且特定的对话关闭时,显示先前最近的和未处理的紧急情况,就好像它们堆叠一样。更新同一个对话框片段的多个实例

而且,对于每个紧急细节每x秒从服务更新以及这些变化需要作出自己的方式向正确的对话框实例,这样,当屏幕上的对话框是最新的。

我有这个工作,我认为,一个无效的方法。我将每个对话框片段对象的实例存储在列表中,并用新的细节更新该实例,然后将其打开。这意味着如果有50个紧急事件被垃圾邮件发送,我就会存储50个对话框。记忆力不佳。

另外,这种方法在取向方面效果不理想,对象被破坏并重新构建,它被从我的列表中取出,并且细节恢复为存储在其意图中的原始细节。

我正在寻找一种方法来做到尽可能高效,我想问你的集体安卓大脑的建议。

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

回答

1

我还能做什么,是牵住EmergencyMessage数据对象堆在我的Activity。当堆栈不空时,我会显示新的DialogFragment,并使用Fragment.setArguments从堆栈顶部传递它EmergencyMessage

在我的DialogFragment,我会用Fragment.getArguments得到EmergencyMessage对象和显示消息。当用户处理消息时,通知您的活动(for example like this)并关闭对话框。然后,如果您的堆栈中仍有未处理的EmergencyMessages,则重复该过程。

这样,你总是有一个DialogFragment例如活跃在任何给定的时间。

现在,关于更新EmergencyMessage内容如果DialogFragment已经表现出这条消息,你可以从一个活动像这样做:

当您创建对话框,通过它标记“EmergencyMessageDialog”这样你就可以在以后retreive对话和与它进行交互。

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

如果您收到处理不当被证明的是,你可以在你的活动栈更新EmergencyMessage对象,所以这将是容易EmergencyMessage更新。

+0

嗨,非常感谢您的答复。这与我目前的情况几乎相同。但是这并没有带来一堆紧急情况的影响。如果两个中的第一个关闭,则第二个应该在UI中打开。我正在调查使用网格/列表视图来更好地处理这些倍数。 – Stephen

+0

@Stephen我不确定你在说什么'堆栈'效果,但是你应该能够为显示/隐藏对话框指定动画。请参阅http://stackoverflow.com/questions/13402782/show-dialogfragment-with-animation-growing-from-a-point – hendrix

+0

您好,感谢您的更新。我相信这肯定会奏效 – Stephen

相关问题