Search code examples
androidandroid-viewpager

Viewpager gives me the wrong position in android when swipe to another image


I am having a ViewPager in my android app,I want to display the particular info with each image that i swipe with the ViewPager,But i am getting the wrong info or position inside ViewPager, it increments and decrements not properly in position,It first increments by two times,Please help me to solve it,My code is as below: code:

private class ImagePagerAdapter extends PagerAdapter {

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

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

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            Context context = DetailsActivity.this;
            ImageView imageView;
            imageView = new ImageView(context);
            try {
                int padding = context.getResources().getDimensionPixelSize(
                        R.dimen.padding_medium);
                imageView.setPadding(padding, padding, padding, padding);
                imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                area.setText(subcategory.get(position).get(
                        Const.TAG_CATAEGORY_NAME));
                System.out
                        .println("::::::::::::::::INFO INDEX:::::::::::::::::"
                                + position);
                imageLoader.displayImage(
                        subcategory.get(position).get(Const.TAG_BIG_IMG),
                        imageView, options);
                System.out
                        .println("::::::::::::::::IMAGE INDEX:::::::::::::::::"
                                + position);
                opkey1.setText(subcategory.get(position).get("opk1"));
                opkey2.setText(subcategory.get(position).get("opk2"));
                opval1.setText(subcategory.get(position).get("opv1"));
                opval2.setText(subcategory.get(position).get("opv2"));

                ((ViewPager) container).addView(imageView, 0);
            } catch (NotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return imageView;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            ((ViewPager) container).removeView((ImageView) object);
        }
    }

Solution

  • ViewPager will preload one(by default) pager,so when the user can swipe smoothly. See

    ViewPager.setOffscreenPageLimit(int limit)
    

    PagerAdapter.instantiateItem(ViewGroup container, int position) the position here won't be equal to the ViewPager.getCurrentItem()

    If you wan't to get the current position user swiped,use

    ViewPager.addOnPageChangeListener(OnPageChangeListener listener)