将模型视图控制器模式应用于Android的片段选项卡。

9
我正在将一个应用程序从Windows Mobile移植到Android,遇到了一些问题。现有的应用程序使用MVP模式,并具有不同的“presenter”类,这些类将在移植中重复使用(这是一个相当广泛的应用程序,重新编写它并不可行,而C#代码正在使用Mono for Android进行全部重用)。这些类需要一个实现接口的视图,在Android中,我通过创建实现适当接口的活动来实现这一点,实例化一个presenter并将自己作为参数传递。这对我们的目的似乎都很好,但是直到冰淇淋三明治出现并尝试使用片段实现它时才出现了问题。
相当多的活动利用选项卡,在使用操作栏和一些其他新功能时,我正在尝试将选项卡活动转换为带有ViewPager的选项卡片段,这就是我遇到一些问题的地方。从我所读的内容来看,将每个选项卡实现为片段似乎是首选方法,但是我不知道如何通过活动使presenter与片段通信。目前,presenter调用活动的接口方法,然后直接访问旋转器、文本视图等以获取和设置所需的值。由于这些UI元素在活动中声明,因此这很简单。但是,如果我将所有这些UI元素移动到片段中,似乎我不能在不实现每个活动和片段之间的全新接口集的情况下访问它们。我尝试在活动中生成对片段中UI元素的引用(通过获取片段根视图,然后在其中找到我想要的视图),但是ViewPager并不总是加载片段,因此这行不通,即使在加载它们时,布局也不会在活动处于运行状态之前膨胀,因此我总是得到空值。
我知道这是一个有点奇怪的问题,但我该如何让我的presenter类与存储在单独的片段选项卡中的UI元素交互?我觉得我一定是在完全错误的方式上进行了操作,但我只是看不出应该如何完成,因此如果有人能够提供一些关于如何解决这个问题的建议,那将是非常好的。

面对同样的问题,使用 MVP 结合 RecyclerView 和 ViewPager 中的自定义项确实很麻烦。 - Neon Warge
1个回答

1
你可以为 FragmentActivity 创建一个单一的 Presenter,并让这个 Presenter 实现每个 Fragment(也称为 Tab)的接口。然后从 FragmentActivity 的实例化中实例化此 Presenter,从而使 Presenter 可以引用所有 Fragments。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接