ViewPager是一种提供左右滑动的view,类似于广告轮播的效果。
首先看ViewPager是怎么使用的。
实现ViewPager需要PagerAdapter来支持。但是PagerAdapter用起来很复杂,不过有FragmentStatePagerAdapter和FragmentPagerAdapter这两个类,这两个类是PagerAdapter的子类。
在FragmentStatePagerAdapter中,提供了两个方法,getCount()和getItem()。第一个方法是用来设置ViewPager中Fragment的数目,的二个方法是用来获取并显示相应的Fragment。
直接看代码
Activity
public class ViewPagerActivity extends AppCompatActivity {
ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pager);
viewPager = (ViewPager) findViewById(R.id.vp_show);
viewPager.setAdapter(new MyViewPagerAdapter(getSupportFragmentManager()));
//Adapter需要传入FragmentManager对象
}
}
然后看Adapter的代码
public class MyViewPagerAdapter extends FragmentStatePagerAdapter {
public MyViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
//这个方法显示相应位置的Fragment
case 0:
return new MyFragment(R.drawable.luxun);
case 1:
return new MyFragment(R.drawable.sunshangxiang);
case 2:
return new MyFragment(R.drawable.zhenji);
default:
return null;
}
}
@Override
public int getCount() {
//这个方法返回ViewPager显示的个数
return 3;
}
最后是Fragment的代码
public class MyFragment extends Fragment {
private ImageView Iv_show;
private int Imgres;
public MyFragment(int Imgres){
this.Imgres = Imgres;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.viewpager,container,false);
Iv_show = (ImageView) view.findViewById(R.id.iv_show);
Iv_show.setImageResource(Imgres);
return view;//返回Fragment的视图
}
}
FragmentStatePagerAdapter和FragmentPagerAdapter的区别
这两个Adapter很相似,他们的区别是,在删除不再需要的fragment时,采取的方式不同。
FragmentStatePagerAdapter会销毁不需要的fragment。而FragmentStPagerAdapter销毁了fragment的视图,而fragment的实例依然是保存着的。
总结:ViewPager的使用相对比较简单,不过如果是在Fragment中嵌入使用ViewPager,并且是在ViewPager中加入Fragment的时候,ViewPager会出现空白不显示的情况,这个时候不能使用getSupportFragmentManager()来获取FragmentManager的对象,需要使用getChildFragmentManager(),这是前段时间做东西的时候遇到的一个问题。