user3339562
user3339562

Reputation: 1385

Can't get correct position while updating view outside ViewPager

I have simple PagerAdapter:

public class MyAdapter extends PagerAdapter {
    Context context;
    int[] res;
    LayoutInflater inflater;

    public MyAdapter(Context context, int[] res) {
        this.context = context;
        this.res = res;
    }

    @Override
    public int getCount() {
        return res.length;
    }

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

        ImageView res1;

        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View item = inflater.inflate(R.layout.my_item, container,
                false);
        res1 = (ImageView) item.findViewById(R.id.res1);

        res1.setImageResource(res[position]);
        imageViewWhichIsDefinedOutsideViewPagerItem.setImageResource(res[position]);

        ((ViewPager) container).addView(item);

        return item;
    }
}

The problem is when I'm setting ImageViews like this:

res1.setImageResource(res[position]);
imageViewWhichIsDefinedOutsideViewPagerItem.setImageResource(res[position]);

res1 which is inflated to ViewPager has a good resource image but imageViewWhichIsDefinedOutsideViewPagerItem has a different resource. How is that possible if I am setting res[position] for both of them? Why is this happening?

Upvotes: 0

Views: 207

Answers (1)

CommonsWare
CommonsWare

Reputation: 1006604

instantiateItem() is called when a page is instantiated, not when a page is shown. Pages are created before they are shown, so that the animation can be smooth as the user swipes between pages.

Do not do anything in instantiateItem() that affects widgets outside of that individual page.

If you want to change imageViewWhichIsDefinedOutsideViewPagerItem when the page changes, set up an OnPageChangedListener and do the work there.

Upvotes: 1

Related Questions