我想知道它为什么需要putInt
成捆。当我滑动到其他选项卡时,我的片段是重新创建还是最后创建的?为什么在这个中使用了空白构造函数?
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0 : return fragment_zg.newInstance(position + 1);
case 1: return fragment_Uni.newInstance(position+1);
default: return fragment_zg.newInstance(position + 1);
}
}
这是我的Fragment
public class fragment_Uni extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
public fragment_Uni() {}
public static fragment_Uni newInstance(int sectionNumber) {
fragment_Uni uni_fragment = new fragment_Uni();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
uni_fragment.setArguments(args);
return uni_fragment;
}
}
答案 0 :(得分:0)
Fragment
始终需要默认构造函数,但不能包含任何其他构造函数。这就是我们使用静态方法创建实例并将参数传递给它的原因。
这背后的原因是保留实例并轻松地将数据保存为捆绑包。
有关详细说明,请参阅this question。
编辑:
要回答其他问题,在这种情况下,每次刷卡时都会创建一个新的Fragment
。如果你想保留片段,你应该使Fragment
成为单身人士。
答案 1 :(得分:0)
我想知道为什么需要把它放入包中。
如果要将某个值传递给Fragment
,则需要使用Bundle
,然后将其设置为Fragment
的参数。否则,参数不会保留在Fragment
娱乐中。如果Fragment
不需要参数或者不是必需参数,则可以省略Bundle
。
当我滑动到其他标签时,我的片段会重新创建或最后使用 创建
它将使用上次创建的,但如果您想要更新,则必须刷新页面适配器,否则数据将不会更新。
为什么在这个中使用了空白构造函数?
这是Fragment
所需的默认构造函数。
答案 2 :(得分:-1)
这是因为在Android系统中重建片段的方式。当Android重新创建片段时,它使用反射(Java反射API)重建它们,因此它假设构造函数没有参数(因为其他方式它不知道如何使用它)。那么为什么需要片段参数呢?参数存储在一个Bundle对象中,Android知道如何重新创建,这就是它使用Bundle的原因,Android只是将参数bundle再次传递给你的片段,你的片段使用存储的值来重新创建自己