我一直在使用Dagger 2查看适用于MVP的Google Android架构示例:
但是,这个例子相当简单 - 每个Activity只有一个Fragment,Dagger Component在Activity中构建,用于将片段的Presenter注入Activity。
我已尝试构建该示例,将多个片段添加到Activity并在它们之间导航。由于每个片段都有自己的演示者,我已将匕首组件构建移动到片段中。所以现在我有:
活动很少,只是加载第一个片段并实现FragmentCallback,视图可以用来切换到另一个片段。
第一个片段有一个按钮,它使用FragmentCallback加载第二个片段 - 片段通过转换活动来获取
public void onAttach(Context context) {
super.onAttach(context);
callback = (FragmentCallback) context;
}
我在这里是否合情合理?虽然使用MVP代码看起来很干净但我遗漏了匕首组件和模块的东西吗?
感谢。
我通过为Activity创建一个组件和模块来改善我的状况。每个Fragment仍构建Dagger上下文,但我不再在presenter构造函数中注入视图(片段) - 当片段构建上下文时,注入自身(因此它具有演示者)然后调用{{1}所以演示者现在有了视图。
这很好地减少了类的数量,下一步是尝试仅在活动中构建组件,并让片段使用它来注入自身(无需构建新组件)。
答案 0 :(得分:0)
你肯定是在正确的轨道上。
我建议您不要在Activity
中使用单个组件,而是每Fragment
个实例化一个单独的组件(即使组件相同)。这种方法有两个好处:
Activity
和其他Fragments
耦合。<强> Offtopic:强>
我写了一篇关于why activities in Android are not UI elements的博文。看看,如果你觉得它有意义,那么有一个链接到MVP的替代实现:)