将演示者传递给Android中的片段(无构造函数)

将演示者传递给Android中的片段(无构造函数),android,fragment,mvp,Android,Fragment,Mvp,我想尝试将MVP模式用于我正在编写的一个简单的Android应用程序。这是我第一次使用MVP模式,因为我还在学习,所以请温柔一点;) 我有一个片段,我想与4位不同的演讲者一起使用。我的问题是,如何将不同的演示者传递给每个实例 我想将演示者传递给构造函数,但是当Android重新创建片段时,它将调用默认构造函数。这是否意味着它将不再包含对演示者的引用 如果是这样,我还可以如何通过演示者 我在下面列出了我想做的一些psuedo代码。请注意,我刚刚在浏览器中直接输入了这个,所以可能会有一些愚蠢的错误,

我想尝试将MVP模式用于我正在编写的一个简单的Android应用程序。这是我第一次使用MVP模式,因为我还在学习,所以请温柔一点;)

我有一个片段,我想与4位不同的演讲者一起使用。我的问题是,如何将不同的演示者传递给每个实例

我想将演示者传递给构造函数,但是当Android重新创建片段时,它将调用默认构造函数。这是否意味着它将不再包含对演示者的引用

如果是这样,我还可以如何通过演示者

我在下面列出了我想做的一些psuedo代码。请注意,我刚刚在浏览器中直接输入了这个,所以可能会有一些愚蠢的错误,但希望你能大致理解我的意思

我的2个界面: 2个演示者示例: 我的片段: 最后,实例化片段的类:
你可以这样做

public class TabsPagerAdapter extends FragmentPagerAdapter{

    private ITabbable tabs[] = {
        ClickableListFragment.newInstance(ClickableListFragment.Type.ARTIST),
        ClickableListFragment.newInstance(ClickableListFragment.Type.TITLE),
        //...
    };
}
在ClickableListFragment中

public enum Type {
    ARTIST,

    TITLE
}

public static MyFragment newInstance(final Type fragmentType) {
    final MyFragment fragment = new MyFragment();
    Bundle args = new Bundle();
    args.putSerializable(TYPE, fragmentType);
    fragment.setArguments(args);
    return fragment;
}
再创造

@Override
public void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Type tempType = (Type) getArguments().getSerializable(TYPE);
    if(tempType == Type.ARTIST){
        variable = new ArtistPresenter(); 
        .... what you want with that variable
    .
    .
    .
}

谢谢,这似乎有效。不过还有一个较小的错误,我认为应该是getArguments().getSerializable(TYPE),而不是savedInstanceState
public class TabsPagerAdapter extends FragmentPagerAdapter{

    private ITabbable tabs[] = {
            new ClickableListFragment("Artist", new ArtistPresenter()),
            new ClickableListFragment("Title", new TitlePresenter()),
            //...
    };

    //...
 }
public class TabsPagerAdapter extends FragmentPagerAdapter{

    private ITabbable tabs[] = {
        ClickableListFragment.newInstance(ClickableListFragment.Type.ARTIST),
        ClickableListFragment.newInstance(ClickableListFragment.Type.TITLE),
        //...
    };
}
public enum Type {
    ARTIST,

    TITLE
}

public static MyFragment newInstance(final Type fragmentType) {
    final MyFragment fragment = new MyFragment();
    Bundle args = new Bundle();
    args.putSerializable(TYPE, fragmentType);
    fragment.setArguments(args);
    return fragment;
}
@Override
public void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Type tempType = (Type) getArguments().getSerializable(TYPE);
    if(tempType == Type.ARTIST){
        variable = new ArtistPresenter(); 
        .... what you want with that variable
    .
    .
    .
}