Android:实现仅加载新页面的ViewPager

时间:2013-12-18 13:11:56

标签: android android-viewpager android-gallery

我正在尝试实现一个总是加载新图像的图库,无论用户是向左还是向右滑动。我所做的是告诉我的PagerAdapter.instantiateItem(v,position)mPosition++加载图片,其中mPosition初始化为0.请注意,我没有使用附带的position

public class ViewPagerAdapter extends PagerAdapter {

    private Context mContext;
    private ImageFactory mImageFactory;
    private int mPosition;

    public ViewPagerAdapter(Context c) {
        mContext = c;
        mImageFactory = ImageFactory.instance();
        mPosition = 0;
    }

    @Override
    public int getCount() {
        return mImageFactory.size();
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == ((FrameLayout) object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {

        LayoutInflater inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View itemView = inflater.inflate(R.layout.viewpager_item, container,
                false);
        // Locate the ImageView in viewpager_item.xml
        ImageView imgflag = (ImageView) itemView.findViewById(R.id.flag);

        // Load Bitmap to ImageView
        mImageFactory.loadImage(imgflag, mPosition++);

        // Add viewpager_item.xml to ViewPager
        ((ViewPager) container).addView(itemView);

        return itemView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // Remove viewpager_item.xml from ViewPager
        ((ViewPager) container).removeView((FrameLayout) object);

    }

}

然而,这不起作用,我猜这是因为ViewPager缓存页面。

所以我不知道我的假设是对还是错,但我很感激你的建议。

谢谢!

1 个答案:

答案 0 :(得分:0)

PagerAdapter有以下方法可以覆盖:

setPrimaryItem 正如文档所述:“调用以通知适配器当前认为哪个项目是”主要“,即向用户显示当前页面。”

因此可以用作更新图像的钩子。如果您需要更新屏幕外的页面,则需要保留对已实例化视图的引用(注意不要泄漏视图)。

另外,请看看Jake Wharton RecyclingPagerAdapter。它摇滚!

https://github.com/JakeWharton/salvage