在多个片段中实现相同的接口,从Activity调用。

时间:2017-11-21 15:29:11

标签: java android android-fragments android-activity interface

在我的Activity onActivityForResult()我想做这样的事情:

OnReturnFromProfile mCallback;
mCallback.onReturnFromProfile(extras);

我将此全局定义为独立文件:

public interface OnReturnFromProfile {
    public void onReturnFromProfile(Bundle extras);
}

现在有几个Fragment可以从Activity onActivityForResult()中获取数据,我希望每个Fragment实现此interface。< / p>

显然这里存在一个重大的设计缺陷。 mCallback不知道要调用的接口的哪个实现。

处理这种情况的正确方法是什么?似乎很长一段时间是在每个interface中设置Fragment,但现在我有5个重复的interface。然后代码变得混乱,因为在Activity我必须在一些长条件语句中传递Fragment tag

这是唯一的方法吗? 我是否需要使用界面?

关于流程的深度背景:

Fragment A(附于Activity A)的列表中包含RecyclerView。当您单击列表行时,它会打开Activity B(使用startActivityWithResult())。在Activity B中,您可以执行影响列表的内容(刚才提到)。很自然地,我希望在Activity B关闭时更新列表。我现在可以在Activity A得到结果。问题是 - 在哪里路由它?我有Fragment的A,B,C,D和E都可以附加到Activity A并在列表上执行类似的操作。所以我的意图(没有双关语)是用一个interface回调最小化代码(我甚至不确定)。

当我输入类型时,如果我有5个具有相同操作和数据类型的列表,我开始意识到可能有更大的架构问题?但他们确实有微妙的差异。

1 个答案:

答案 0 :(得分:0)

片段不必定义接口。接口可以在其他地方定义一次。每个Fragment都可以简单地实现接口。

实际上,不需要知道“onReturnFromProfile()”事件的Fragment不需要实现接口。

活动可以:

if(fragment instanceof OnReturnFromProfile) {
  (OnReturnFromProfile)fragment.onReturnFromProfile();
}

请注意,将对象转换为接口的引用可以解决“接口的哪个实现?”问题