3

我正在从pageradapter(到asyctask)传递它的位置

instanceiteItem(查看集合,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);
    }

}
4

2 回答 2

9

您可能正在寻找的是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)
                }

所以你不只是产生一堆并发任务......

于 2013-04-16T02:27:33.773 回答
3

此方法被添加到 ViewPager。所以你可以使用如下。

ViewPager viewPager = new ViewPager(...);

...... // set viewpager adapter


obj = viewPagerAdapter.getItem(viewPager.getCurrentItem());
于 2015-01-27T03:50:22.710 回答