今天在写App的时候遇到了一个问题,我用ViewPager加载三个View(里面只放了一个全屏的ImageView)的时候,View的背景颜色设置的是黑色,但是加载出来的View是全屏的白色,并且没有图片。意思也就是说没有加载成功。但是App还是可以正常的翻页。 后来发现该问题出在写ViewPagerAdapter类的时候,继承了ViewPager,里面的一个函数有错误,叫做instantiateItem(ViewGroup container, int position)
下面是未修改时的ViewPagerAdapter代码: package com.example.a53125.viewpagertest; import android.content.Context; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.View; import android.view.ViewGroup;
import java.util.List; /** * Created by 53125 on 2017/8/5. */ public class ViewPagerAdapter extends PagerAdapter { private List<View> list; private Context context; ViewPagerAdapter(Context context,List<View> list){ this.list = list; this.context = context; } public void addViewPager(ViewPager vp){ list.add(vp); }; public void removeViewPager(){}; @Override public int getCount() { return list.size(); } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(list.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { return container; } @Override public boolean isViewFromObject(View view, Object object) { return (view == object); } }其中我们的 instantiateItem(ViewGroup container, int position)函数是直接返回的container。而这个容器的作用是,在实例化新的ViewPagerAdapter类的时候,会自动调用该函数,该函数会根据你的传入的List来把里面每一个View都放进Adapter里面,所以在该函数里面我们必须把每一个View都添加到ViewPagerAdapter的List里面,再将该ViewPagerAdapter与一个xml文件绑定,这样就能得到我们预期的视图了。
修改后的instantiateItem(ViewGroup container, int position)函数代码如下:
@Override public Object instantiateItem(ViewGroup container, int position) { container.addView(list.get(position)); return list.get(position); }