我正在从pageradapter(到asyctask)传递它的位置
instantiateItem(View collection,int pos){。execute(pos);}
但当我向上一页滑动时,它位置错误,如何才能获得正确的先前位置?
也许我可以使用ViewPager getCurrentItem()来检索当前页面的索引但是如何将它与我的代码一起使用?
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);
}
}
答案 0 :(得分:8)
您可能正在寻找的是ViewPager.setOnPageChangeListener
所以你可以这样做:
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) {
}
});
此外,我不确定在选择页面时您尝试执行的任务类型,但首先取消之前的任务是有意义的。例如:
@Override
public void onPageSelected(int i) {
fft.cancel(true);
fft.execute(i)
}
所以你不要只产生一堆并发任务......
答案 1 :(得分:3)
此方法已添加到ViewPager中。所以你可以使用如下。
ViewPager viewPager = new ViewPager(...);
...... // set viewpager adapter
obj = viewPagerAdapter.getItem(viewPager.getCurrentItem());