Reputation: 1472
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
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
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