大家都知道,viewpager是默认预加载下一页的界面的。viewpager提供了一个设置预加载页面数量的方法,那就是setOffscreenPageLimit()。默认不设置数量的情况下预加载下一页。设置0和1是同样的效果。不多说,上代码。
布局为一个ViewPager
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android ="http://schemas.android.com/apk/res/android"
xmlns:tools ="http://schemas.android.com/tools"
android:layout_width ="match_parent"
android:layout_height ="match_parent"
>
<android.support.v4.view.ViewPager
android:id ="@+id/vp"
android:layout_width ="match_parent"
android:layout_height ="match_parent" >
</android.support.v4.view.ViewPager >
</RelativeLayout >
为了测试我就创建了5个Fragment界面,简单的在onCreateView中返回一个 TextView。
每个界面都类似,只是设置的文字不一样。只贴个第一页:
public class FragmentOne extends Fragment {
@Nullable
@Override
public View onCreateView (LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
TextView textView = new TextView(getContext());
textView.setText("第一页" );
Log.e("createView" ,"第一页创建了" );
return textView;
}
@Override
public void onDestroyView () {
super .onDestroyView();
Log.e("onDestroyView" , "第一页销毁了 " );
}
}
使用FragmentFactory来管理这5个Fragment界面
public class FragmentFactory {
private static HashMap<Integer, Fragment> mSavedFragment = new HashMap<Integer, Fragment>();
public static Fragment getFragment (int position) {
Fragment fragment = mSavedFragment.get (position);
if (fragment == null ) {
switch (position) {
case 0 :
fragment = new FragmentOne();
break ;
case 1 :
fragment = new FragmentTwo();
break ;
case 2 :
fragment = new FragmentThree();
break ;
case 3 :
fragment = new FragmentFour();
break ;
case 4 :
fragment = new FragmentFive();
break ;
}
mSavedFragment.put(position, fragment);
}
return fragment;
}
}
给viewpager设置adapter。代码很简单。并设置预加载页数为1,当然也可以不设置,因为默认就是预加载一页。
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pager);
ViewPager viewPager = (ViewPager) findViewById(R.id.vp);
viewPager.setAdapter(new myAdapter(getSupportFragmentManager()));
viewPager.setOffscreenPageLimit(1 );
}
class myAdapter extends FragmentPagerAdapter {
public myAdapter(FragmentManager fm) {
super (fm);
}
@Override
public Fragment getItem(int position) {
return FragmentFactory.getFragment(position);
}
@Override
public int getCount() {
return 5 ;
}
}
运行程序,可以看到第一个界面和第二个界面都创建了
然后往右滑动,滑到第二个界面,log显示第三页创建了,再往右滑,第一个界面销毁,第四个界面创建了。
同理修改setOffscreenPageLimit的值为2,运行程序。显示第一页第二页第三页都创建了
然后往右滑到第二页,第四个界面创建了,滑到第三页,第五个界面创建了。再往右滑到第四页,第一个界面销毁。
如有错误请指出,谢谢。