带有 View 寻呼机的 Android MVP

标签 android android-viewpager mvp android-mvp

我正在尝试在我的 android 项目中实现 MVP。但是当我使用 viewPagerAdapter 实现 MVP 时,我遇到了困难。为了实现 MVP,我们过去常常在 Activity 类中创建 fragment/view 和 presenter 实例。Fragment/view 和 presenter 都将使用契约相互通信。通过这种方式,我们将 View 与 Presenter 解耦,并通过单元测试覆盖所有业务逻辑。但是如果我们在 activity 中有 tablayout。我们在 fragmentPagerAdapter 中启动了 fragment 。我不确定如何为其相应的演示者提供选项卡 fragment/ View 引用。如果我在 fragmentPagerAdapter 中初始化演示者,这将漂白 SRP(单一责任主体)。如果我们在 Fragment 中创建 presenter 实例,这将生成耦合代码,那么我们不需要联系来建立 fragment 和 presenter 之间的通信。请提供架构解决方案,以便我可以使用 View 寻呼机实现相同的 MVP,同时坚持所有干净的代码原则。

作为引用,请在下面找到我的适配器代码,我在其中初始化选项卡的 fragment :

  @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                return getConfigurationsTabFragment();
            case 1:
                return UpdateTabFragment.newInstance();
            case 2:
                return ServiceTabFragment.newInstance();
            default:
                return null;
        }
    }  

最佳答案

private class MyAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();

        public MyAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }
        public void addFragement(Fragment fragment){
            mFragmentList.add(fragment);
        }
    }

在 Activity 中使用它:

    MyAdapter adapter = new MyAdapter(getChildFragmentManager());
    Fragment fragment1 = EmptyFragment.newInstance("this is page 1");
    Fragment fragment2 = EmptyFragment.newInstance("this is page 2");
    presenter1.setxxx(fragment1);
    presenter2.setxxx(fragment2);
    adapter.addFragement(fragment1);
    adapter.addFragement(fragment2);
    viewPager.setAdapter(adapter);

关于带有 View 寻呼机的 Android MVP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48921915/

相关文章:

Android Activity 和 Fragment 之间的通信

android - 删除页面并将其添加到 FragmentPagerAdapter

java - MVP 和 GWT 小部件之间的通信

winforms - MVP 流程问题

testing - 最有值(value)球员 : Dialog boxes that return value and testable code

android - 如何在滚动 ListView 时逐个播放视频和播放/暂停

android - getAdapterPosition() 不返回项目在 RecyclerView 中的位置

带有 View 寻呼机的android动态文本

安卓 8 : Cleartext HTTP traffic not permitted

android - 为什么Android Studio建议onTouch调用view.performClick?