Viewpager:获取当前项目位置

时间:2013-04-16 01:49:04

标签: android android-viewpager

我正在从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);
    }

}

2 个答案:

答案 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());