1

用户请求删除文件后(通过上下文菜单),会触发 DialogFragment 要求用户确认。如果用户确实确认,则调用 Activity 会删除该文件。

至少有两种方法可以做到这一点。

  1. DialogFragment 调用 deleteFile(),Activity 中的一个方法,它本身可以通过 getActivity() 访问。
  2. Activity 实现了一个 DeleteFile 接口。DialogFragment 设置一个Uri,将监听器初始化为Activity,并向监听器发送消息。为了更加安全,onAttach() 确认 Activity 确实实现了必要的接口。

文档表明,第二个选项更好,至少在一般情况下。但在这种情况下,无论用户何时触发旋转(重置 Activity 和 DialogFragment),第一种方法似乎都非常可靠。

第一种方法是否完全足够,或者是否存在除了轮换之外的其他方案可以使第二种方法更好。

4

2 回答 2

3

两种实现都可以完成您想要做的事情,但两者之间肯定存在一些差异。在大多数情况下,接口并不是完全“必需的”,您始终可以强制转换为具体类并调用方法。接口提供的好处在于解耦。如果您使用接口,DialogFragment则不会绑定到特定的Activity. AnyActivity可以实现相同的接口并与 . 一起使用DialogFragment,从而使其Fragment更可重用(这是片段的一半)。

于 2013-04-03T18:46:44.957 回答
0

我想说这两种实现是等价的,因为它们都要求活动遵守特定的合同(第一种情况下的类,第二种情况下的接口)。您无法避免将活动转换为特定的接口/类。

您可以尝试的另一种方法是在片段本身中实现(大部分)逻辑。我不知道它是否适合您的情况,但它肯定会帮助您重用该片段。也许它不太适合对话片段..

于 2013-04-03T18:01:51.653 回答