在我的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个具有相同操作和数据类型的列表,我开始意识到可能有更大的架构问题?但他们确实有微妙的差异。
答案 0 :(得分:0)
片段不必定义接口。接口可以在其他地方定义一次。每个Fragment都可以简单地实现接口。
实际上,不需要知道“onReturnFromProfile()”事件的Fragment不需要实现接口。
活动可以:
if(fragment instanceof OnReturnFromProfile) {
(OnReturnFromProfile)fragment.onReturnFromProfile();
}
请注意,将对象转换为接口的引用可以解决“接口的哪个实现?”问题