处理DialogFragment回调的最佳方法是什么?

时间:2014-01-27 11:44:49

标签: android dialog callback fragment

我一直在使用DialogFragment来处理应用上的对话。

我已阅读this,其中提供了一些有关如何使用它的示例,但它总是使用以下内容:

((FragmentAlertDialog)getActivity()).doPositiveClick();
((FragmentAlertDialog)getActivity()).doNegativeClick();

我真的不喜欢这个实现,因为它强制要求某个预先知道的活动,所以它不是很强大。

我也知道FragmentDialog内传递和存储回调不是一个好的选择,因为如果它引用了一个Activity,例如在轮换后,该活动可能已被销毁...并且回调未更新。

当活动通过onResume时更新回调也不是一个非常可行的选项,因为它必须知道正在显示哪个Dialog并设置与之相关的回调,这使得逻辑在较大的应用上有点棘手

那么你建议什么样的实现可以避免强制转换,同时始终保留最新的回调?

1 个答案:

答案 0 :(得分:1)

您已经列举了无法使用回调的原因,非常雄辩。不幸的是,我认为演员(或类似的东西)是不可避免的。坦率地说,整个范式相当尴尬。

如果您计划在多个活动之间共享对话框片段,则可以使用接口。

 ((IXyzDialogHost)GetActivity())->onSomethingHappened()

我认为,这种方法有待说明。我不能说我个人已经习惯了这种方法,但想到这一点,我可能会想要向前迈进。至少你可以使用适当的静态DialogFragment.Create方法强制执行调用Activity的契约,该方法处理片段管理器事务的捆绑设置以及其他不愉快的事情:

 class XyzDialogFragment {
   {
         public static DialogFragment Create(IXyzDialogHost activity, ...)
         {
            ...
         }

   } 

但还是有演员。