我正在使用以下简单FragmentStatePagerAdapter
,我希望获得对其中一个片段的引用,请记住它们可能已被破坏。
public class MyStatePagerAdapter extends FragmentStatePagerAdapter {
private int count;
public MyStatePagerAdapter(FragmentManager fm, int count) {
super(fm);
this.count= count;
}
@Override
public Fragment getItem(int arg0) {
switch (arg0) {
case 0:
return MyFragment1.newInstance();
case 1:
return MyFragment2.newInstance();
default:
return null;
}
}
@Override
public int getCount() {
return count;
}
}
我看到了this个问题,其第二个回答是,如果您致电FragmentStatePagerAdapter.instatiateItem
并且已经有对该片段的引用,则不会再次调用getItem()
。我查看了源代码here,据我了解,这确实发生了什么。
然而,我想知道,我可以做以下事情吗?这看起来很简单,但事实是我还没有看到它在任何地方被使用,这让我怀疑某些事情是错的,我无法看到。
所以基本上我的问题是:使用类似下面的内容来访问片段时会出现什么错误?
public class MyStatePagerAdapter extends FragmentStatePagerAdapter {
private int count;
private MyFragment1 myFragment1;
private MyFragment2 myFragment2;
public MyStatePagerAdapter(FragmentManager fm, int count) {
super(fm);
this.count= count;
}
@Override
public Fragment getItem(int arg0) {
switch (arg0) {
case 0:
if (myFragment1 == null) {
myFragment1 = MyFragment1.newInstance();
}
return myFragment1;
case 1:
if (myFragment2 == null) {
myFragment2 = MyFragment2.newInstance();
}
return myFragment2;
default:
return null;
}
}
@Override
public int getCount() {
return count;
}
}
为了得到它,我会打电话给getItem(position)
。
答案 0 :(得分:1)
我看到这种方法的一个问题是myFragment1
和myFragment2
不是null
。假设你摆脱了null
检查。每次拨打Fragment
时,您都会产生新的getItem()
问题。
我看到的另一个问题是getItem()
将始终返回null
。您的break
中没有switch
个语句,因此它会一直显示default
null
的{{1}}个案。如果添加相应的breaks
,则在return
之后添加相应的if(){...}
语句之前,代码不应编译。
另外,我建议您养成在方法参数中添加有意义名称的习惯。