我一直在使用DialogFragment
来处理应用上的对话。
我已阅读this,其中提供了一些有关如何使用它的示例,但它总是使用以下内容:
((FragmentAlertDialog)getActivity()).doPositiveClick();
((FragmentAlertDialog)getActivity()).doNegativeClick();
我真的不喜欢这个实现,因为它强制要求某个预先知道的活动,所以它不是很强大。
我也知道在FragmentDialog
内传递和存储回调不是一个好的选择,因为如果它引用了一个Activity,例如在轮换后,该活动可能已被销毁...并且回调未更新。
当活动通过onResume
时更新回调也不是一个非常可行的选项,因为它必须知道正在显示哪个Dialog并设置与之相关的回调,这使得逻辑在较大的应用上有点棘手
那么你建议什么样的实现可以避免强制转换,同时始终保留最新的回调?
答案 0 :(得分:1)
您已经列举了无法使用回调的原因,非常雄辩。不幸的是,我认为演员(或类似的东西)是不可避免的。坦率地说,整个范式相当尴尬。
如果您计划在多个活动之间共享对话框片段,则可以使用接口。
((IXyzDialogHost)GetActivity())->onSomethingHappened()
我认为,这种方法有待说明。我不能说我个人已经习惯了这种方法,但想到这一点,我可能会想要向前迈进。至少你可以使用适当的静态DialogFragment.Create方法强制执行调用Activity的契约,该方法处理片段管理器事务的捆绑设置以及其他不愉快的事情:
class XyzDialogFragment {
{
public static DialogFragment Create(IXyzDialogHost activity, ...)
{
...
}
}
但还是有演员。