当前位置: 首页 > 知识库问答 >
问题:

AndroidMVP与匕首2-活动与多个碎片

丌官绍元
2023-03-14

我一直在看谷歌Android架构的MVP与匕首2的例子:

https://github.com/googlesamples/android-architecture/blob/todo-mvp-dagger/todoapp/app/src/main/java/com/example/android/architecture/blueprents/todoapp/tasksactivity.java

但是,这个示例相当琐碎--每个活动只有一个片段,Dagger组件构建在活动中,用于将活动与片段的演示者一起注入。

  • fragmentcallback(提供加载fragment1和fragment2的方法的接口)
  • 活动(实现碎片回调)
  • fragment1(实现视图接口)
  • Fragment1Contract(定义视图和演示器接口)
  • Fragment1Presenter(实现presenter接口)
  • fragment1component(injects Fragment1)
  • Fragment1Module(提供视图和演示者)
  • 碎片2
  • Fragment2Contract(定义视图和演示器接口)
  • Fragment2Presenter(实现presenter接口)
  • fragment2component(injects Fragment2)
  • Fragment2Module(提供视图和演示者)

该活动做的很少,它只是加载第一个片段并实现FragmentCallback,视图可以使用它切换到另一个片段。

第一个片段有一个按钮,该按钮使用FragmentCallback加载第二个片段-片段通过以下方法强制转换活动获得

public void onAttach(Context context) {
    super.onAttach(context);
    callback = (FragmentCallback) context;
}

通过为活动创建一个组件和模块,我稍微改善了我的情况。每个片段仍然构建Dagger上下文,但我不再在presenter构造函数中注入视图(片段)--当片段构建上下文时,它将自己注入(因此它拥有了presenter),然后调用presenter.init(this),以便presenter现在拥有了视图。

这很好地减少了类的数量,下一步将是尝试只在活动中构建组件,并让片段使用它来注入自己(而不必构建新的组件)。

共有1个答案

束俊英
2023-03-14

你肯定是在正确的轨道上。

我建议不要在活动中使用单个组件,而是在每个片段中实例化一个单独的组件(即使组件是相同的)。这种方法有两个好处:

  • 片段不通过组件本身(以及如果使用作用域组件可以缓存的对象)耦合到活动和其他片段
  • 允许更细粒度地使用作用域(如果需要的话)
 类似资料:
  • 我看了几篇不同的文章,这些文章似乎建议在Dagger 2中使用两种不同的方法进行自定义范围界定: > 在配置更改第2部分(Github repo)中幸存的MVP演示者: 为每个片段使用唯一的自定义作用域,例如分别为和的

  • 我已经和匕首2一起工作了一段时间,我还在试图弄清楚一些事情。我仍然不能很好地管理的一件事是为不同的情况设置模块和组件,比如一个有几个片段的活动。我看过很多实现,大多数时候都有点不同。 所以,让我公开我目前的应用程序结构使用MVP,我想要一些意见,如果我的实现是好的或不是。 现在,MainActivity有3个片段,我将为片段创建3个模块和1个组件 然后我必须实例化Dagger,首先在我的应用程序类

  • 我可以使用一个片段作为一个活动吗?我已经创建了一个片段,但我希望它有像活动一样的功能,所以我使用片段扩展碎片活动。然而,我有一个带有碎片的导航抽屉。当我更改为“扩展碎片活动”时,我的代码有问题?请给我指路。

  • 我读过很多关于这方面的文章,但也有2012年或更早的文章。 (我只是打算从数据库中读取和插入一些数据。)

  • 我是Android新手。我想建立一个标签格式的应用程序。我找到了许多使用了活动的文档。在许多情况下,还使用了碎片活动。我不确定从哪一个开始更好。请建议我是否应该使用或以选项卡格式开始开发?

  • 我不知道如何使用以下内容显示自定义片段: 类型不匹配:推断的类型是LoginFrament,但预期是片段