metemet06
metemet06

Reputation: 1472

Viewpager: getting current item position

I'm getting position passing it from pageradapter ( to asyctask)

instantiateItem(View collection, int pos) { .execute(pos);}

But when I swipe to previous page it holds wrong position, How can I get the correct previous position ?

Maybe Ican use ViewPager getCurrentItem() to retrieve the index of the current page but how can I use it with my codes ?

public class QuestionPagerAdapter extends PagerAdapter{

    public QuestionPagerAdapter(){
        super();

    }
    @Override
    public int getCount() {
        int qcount = QuestionPagerAdapter.q.getQuestionCount();
        return qcount;
    }

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

    @Override
    public Object instantiateItem(View collection, int pos) {
        LayoutInflater inflater = (LayoutInflater) collection.getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View page = inflater.inflate(R.layout.page_quiz, null);

        TextView tv = (TextView)page.findViewById(R.id.questionText);

        QuizFetchTask fft = new QuizFetchTask(tv);
        fft.execute(pos);

            ((ViewPager) collection).addView(page, 0);
        return page;
    }


    @Override
    public void destroyItem(View collection, int position, Object view) {
        //Util.Log("destroying" + position);
        ((ViewPager) collection).removeView((View) view);
    }

}

Upvotes: 3

Views: 14648

Answers (2)

Lee Jeongmin
Lee Jeongmin

Reputation: 893

This method is added to the ViewPager. So you can use as below.

ViewPager viewPager = new ViewPager(...);

...... // set viewpager adapter


obj = viewPagerAdapter.getItem(viewPager.getCurrentItem());

Upvotes: 3

LuxuryMode
LuxuryMode

Reputation: 33741

What you are probably looking for is ViewPager.setOnPageChangeListener

so you can do something like:

myViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i2) {

            }

            @Override
            public void onPageSelected(int i) {
               fft.execute(i)
            }

            @Override
            public void onPageScrollStateChanged(int i) {

            }
        });

Also, I'm not sure what type of task you're trying to execute when the page is selected but it make sense to cancel the previous one first..for example:

                @Override
                public void onPageSelected(int i) {
                   fft.cancel(true);
                   fft.execute(i)
                }

So you don't just spawn a bunch of concurrent tasks...

Upvotes: 9

Related Questions