ViewPager 和片段问题
ViewPager and Fragments Issue
假设我在 viewPager
适配器中有三个 fragments
。
每次我滚动到那个 fragment
时它是否创建视图(在调用创建视图时)
或
当我们尝试设置适配器时,它是否只在主 activity 的初始化中调用?
如果是第二种,那么一开始就做繁重的工作。如果它是第一个,那么我必须保存片段状态并且不能一直调用它的init方法。
提前致谢。
List<Fragment> l = new ArrayList<>();
l.add(Fragment.instantiate(this, DashBoard.class.getName()));
l.add(Fragment.instantiate(this,Expenses.class.getName()));
l.add(Fragment.instantiate(this,Gross.class.getName()));
SliderAdapter sa = new SliderAdapter(getSupportFragmentManager(),l);
vp = (ViewPager) findViewById(R.id.viewPager);
vp.setAdapter(sa);
是的,每次滑动片段时都会调用 onCreteView
解决方案:其中一种解决方案可以使用:
public void setOffscreenPageLimit (int limit) api
设置在空闲状态下应保留在视图层次结构中当前页面任一侧的页面数。超出此限制的页面将在需要时从适配器重新创建。
参考 Android Doc
不,它不会在您每次向左或向右滑动时创建。它会保留额外的页面。但是您可以通过设置屏幕页面限制来每次创建它。
public void setOffscreenPageLimit (int limit)
参考请查看this
假设我在 viewPager
适配器中有三个 fragments
。
每次我滚动到那个 fragment
或
当我们尝试设置适配器时,它是否只在主 activity 的初始化中调用?
如果是第二种,那么一开始就做繁重的工作。如果它是第一个,那么我必须保存片段状态并且不能一直调用它的init方法。
提前致谢。
List<Fragment> l = new ArrayList<>();
l.add(Fragment.instantiate(this, DashBoard.class.getName()));
l.add(Fragment.instantiate(this,Expenses.class.getName()));
l.add(Fragment.instantiate(this,Gross.class.getName()));
SliderAdapter sa = new SliderAdapter(getSupportFragmentManager(),l);
vp = (ViewPager) findViewById(R.id.viewPager);
vp.setAdapter(sa);
是的,每次滑动片段时都会调用 onCreteView
解决方案:其中一种解决方案可以使用:
public void setOffscreenPageLimit (int limit) api
设置在空闲状态下应保留在视图层次结构中当前页面任一侧的页面数。超出此限制的页面将在需要时从适配器重新创建。 参考 Android Doc
不,它不会在您每次向左或向右滑动时创建。它会保留额外的页面。但是您可以通过设置屏幕页面限制来每次创建它。
public void setOffscreenPageLimit (int limit)
参考请查看this