使用 Fragment Tabs 将 Model View Presenter 模式适配到 Android
Posted
技术标签:
【中文标题】使用 Fragment Tabs 将 Model View Presenter 模式适配到 Android【英文标题】:Adapting Model View Presenter pattern to Android With Fragment Tabs 【发布时间】:2012-07-03 10:53:39 【问题描述】:我正在将应用程序从 windows mobile 移植到 android,但遇到了一些问题。现有应用程序使用 MVP 模式并具有不同的“presenter”类,这些类将在端口中重用(这是一个相当广泛的应用程序,重写它是不可能的,并且 C# 代码都使用 mono for android 重用)。这些采用实现接口的视图,在android中我通过创建实现适当接口的活动、实例化演示者并将自己作为参数传递来实现。对于我们的目的,这一切似乎都可以正常工作,或者直到冰淇淋三明治问世并且我尝试使用片段来实现它。
相当多的活动使用选项卡,为了使用操作栏和其他一些新功能,我正在尝试将选项卡式活动转换为带有查看器的选项卡式片段,这就是我要打一些的地方问题。从我所阅读的内容来看,将每个选项卡实现为片段似乎是首选方法,但我对如何允许演示者通过活动与片段进行通信感到困惑。目前,演示者调用活动的接口方法,然后直接访问微调器、文本视图等以根据需要获取和设置值。由于这些 ui 元素中的每一个都在活动中声明,这很简单。如果我将所有这些 ui 元素移动到片段,但是如果不在每个活动和片段之间实现一组全新的接口,我似乎无法访问它们。我尝试在活动中生成对片段中 ui 元素的引用(通过获取片段根视图,然后在其中找到我想要的视图),但是 viewpager 并不总是加载片段,所以这不起作用,即使它已经加载了它们,布局也不会膨胀,直到活动处于运行状态,所以我总是返回空值。
我知道这是一个奇怪的问题,但是我怎样才能让我的演示者类与现在存储在单独的片段选项卡中的 ui 元素进行交互?我觉得我必须以完全错误的方式去做,但我只是看不出应该怎么做,所以如果有人能提供一些关于我如何去做的建议,那就太好了。
【问题讨论】:
遇到同样的困境,在 RecyclerView 和 ViewPager 中使用带有自定义项目的 MVP 是 @ss 使用的痛苦 【参考方案1】:如何为 FragmentAcivity 中的所有 Fragment 创建单个 Presenter,然后让这个单个 Presenter 为每个 Fragment(又名 Tab)实现一个接口。然后从您的 FragmentActivity 实例中实例化此演示者,演示者将从该实例中获得对所有片段的引用。
【讨论】:
以上是关于使用 Fragment Tabs 将 Model View Presenter 模式适配到 Android的主要内容,如果未能解决你的问题,请参考以下文章
HarmonyOS鸿蒙学习笔记Tabs模仿安卓ViewPager+Fragment的效果
HarmonyOS鸿蒙学习笔记Tabs模仿安卓ViewPager+Fragment的效果
Android 将 ArrayList<Model> 从 Activity 传递给 Fragment
如何将 List<Model> 从 Activity 传递到 Fragment