在FragmentPagerAdapter中使用Dagger实现MVP

时间:2016-07-05 17:02:18

标签: android android-fragments tabs mvp fragmentpageradapter

我正在尝试使用MVP设置标签式布局并遇到一些困难。我使用Google's Dagger MVP sample app作为一般参考,并将参考存储在每个活动中的每个演示者中。但是,在我的选项卡式布局中,我正在使用一个活动,每个选项卡都有一个片段(通过FragmentPagerAdapter传递)。片段被实例化,并且他们的演示者在FragmentPagerAdapter的getItem()方法中注入。问题是,当应用程序旋转时,我的片段会自动重建,但不会让他们的演示者返回,然后由于NPE而崩溃。我一直把演示者作为字段存储在活动或FragmentPagerAdapter(一个谷歌)中,但无论如何都没有工作,而且看起来很hacky。

这基本上就是我现在在FragmentPagerAdapter中的表现:

public class MyFragmentPagerAdapter extends FragmentPagerAdapter {

    @Inject MyPresenter mMyPresenter;

    @Override
    public Fragment getItem (int position){
    switch (position) {
        case MY_FRAGMENT_INDEX:
            return createMyFragment;
        case OTHER_FRAGMENT_INDEX:
            return createMyOtherFragment;
        default:
            return null;
    }

    private Fragment createMyFragment() {
        MyFragment myFragment = MyFragment.newInstance();
        // make the presenter
        DaggerMyPresenterComponent.builder()
                .MyModelComponent(
                        ((MyApplication) getApplication()).getMyModelComponent())
                .MyPresenterModule(new MyPresenterModule(myFragment)).build()
                .inject(this);
        return myFragment;
    }

在这种情况下,有什么好的架构?我应该在哪里保留对演示者的引用(如果有的话),以及如何管理他们的实例化和重新创建(如果FragmentPagerAdapter不会为我做这些)?

0 个答案:

没有答案