带有视图传呼器的Android MVP

Swa*_*ava 5 mvp android android-viewpager android-mvp

我正在尝试在我的android项目中实现MVP。但是,当我使用实施MVP时,我会遇到困难viewPagerAdapter。为了实现MVP,我们曾经在Activityclass中创建fragment / view和presenter实例.Fragment / view和presenter都将使用合约相互通信。这样,我们将视图与演示者分离,并通过单元测试涵盖了所有业务逻辑。但以防万一,当我们有tablayout里面activity。我们已经在内部初始化了片段fragmentPagerAdapter。我不确定如何向其相应的演示者提供选项卡片段/视图引用。如果我在内部初始化演示者fragmentPagerAdapter会漂白SRP(单一责任主体)。如果我们在里面创建presenter实例Fragment这将生成耦合的代码,然后我们不需要联系就可以在片段和演示者之间建立通信。请提供体系结构解决方案,以便我可以使用视图分页器实现相同的MVP并遵守所有干净的代码主体。

作为参考,请在我的适配器代码下面找到我正在初始化Tab的片段:

  @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;
        }
    }  
Run Code Online (Sandbox Code Playgroud)

小智 2

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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

在活动中使用它:

    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);
Run Code Online (Sandbox Code Playgroud)