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