【问题标题】:What is the best way to handle DialogFragment callbacks?处理 DialogFragment 回调的最佳方法是什么?
【发布时间】:2014-01-27 11:44:48
【问题描述】:

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

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

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

我不太喜欢这种实现,因为它强制转换为预先知道的 Activity,所以它不是很健壮。

我也知道FragmentDialog 中传递和存储回调不是一个好的选择,因为如果它引用了一个 Activity,例如在旋转之后,该 Activity 可能已经被销毁了。 . 并且回调没有更新。

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

那么您建议什么实现来避免强制转换,同时始终保持最新的回调?

【问题讨论】:

    标签: android dialog callback fragment


    【解决方案1】:

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

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

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

    我想,对于这种方法,有话要说。我不能说我自己个人也使用过这种方法,但考虑到这一点,我可能很想继续这样做。至少您可以使用适当的静态 DialogFragment.Create 方法在调用 Activity 上强制执行合同,该方法处理捆绑片段管理器事务的设置以及其他不愉快的事情:

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

    但仍有演员表。

    【讨论】:

      猜你喜欢
      • 2010-09-06
      • 2017-09-30
      • 1970-01-01
      • 2012-09-18
      • 2011-05-20
      • 1970-01-01
      • 2016-05-26
      • 2018-12-03
      • 1970-01-01
      相关资源
      最近更新 更多