jigar
jigar

Reputation: 31

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);
        }
    }

Upvotes: 2

Views: 3858

Answers (2)

Th. Stylianopoulos
Th. Stylianopoulos

Reputation: 1

I faced the same problem. I found the following solution: Inside the onCreate of the Activity that creates the viewpager, after the creation of the viewpager i have added a new onpagechangelistener and i used the onpagescrolled.

ViewPager viewPager = (ViewPager)findViewById(R.id.pager2);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        if (positionOffsetPixels == 0) {
            //Do something on selected page at position
            mtextView.setText(String.valueOf(position + 1) + " of " + String.valueOf(totalimages) + " photos.");
        }
    }
});

I have found these approach somewhere else, i do not remmber, but it is working for me.I hope I am helping somehow.

Upvotes: 0

Charlie
Charlie

Reputation: 172

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)

Upvotes: 7

Related Questions