我有一个ViewPager
,可以创建3个片段。
在 ViewPager pager = (ViewPager) findViewById(R.id.pager);
pager.setOffscreenPageLimit(2);
pager.setAdapter(new PagerAdapter(getSupportFragmentManager()));
我设置了pager.setOffScreenPageLimit(2)
,如下所示:
OnViewCreated
PagerAdapter
来自此处https://stackoverflow.com/a/11852707/1662033,以确保为每个片段调用一次public class PagerAdapter extends FragmentPagerAdapter {
public PagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Home";
case 1:
return "Live";
case 2:
return "Gallery";
default:
return null;
}
}
@Override
public int getCount() {
return 3;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new HomeFragment();
case 1:
return new LiveFragment();
case 2:
return new GalleryFragment();
default:
return null;
}
}
}
。
这是 onCreateView
类:
onActivityCreated
在当前代码中:所有片段的LiveFragment
,LiveFragment
等都会在开头调用一次,就是这样。
我遇到的问题是 - 在其中一个片段(onCreateView
)中,我有一个自定义视图,它连接到相机并显示实时流。
我想要的是 - 只有当用户导航到片段时,才会使$("form").serialize();
的视图膨胀,而不是现在的情况 - 它在开始时与其他片段一起膨胀。
有没有办法只在选择片段时调用serialize
?
答案 0 :(得分:0)
FragmentPagerAdapter创建所有片段,并且始终将所有片段都放在内存中。即所有碎片只创建一次,您可以在它们周围导航。
默认情况下,FragmentStatePagerAdapter在任何给定时间内在内存中创建并且只有3个片段(当前片段和当前片段的左右片段)。你无法减少这个数字。但是,您可以使用viewpager.setOffScreenPageLimit()
增加内存中的碎片数量。
由于您只有3个片段,因此在初始化Viewpager时会创建所有3个片段。您可以使用viewpager.addOnPageChangeListener()
跟踪屏幕上当前可见的片段。使用此选项,只有当Fragment当前可见时,您才可以将LiveFragment的视图从虚拟视图更改为实际视图。