Viewpager:获取当前的项目位置

3

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

}

我不太明白你想做什么,为什么 getCurrentItem() 对你无效? - FoamyGuy
它可以在我的MainActivity中使用。但我想在我的asynctask类中使用它。那么我该如何在asynctask文件中创建一个新的适配器?在MainActivity中,我是在oncreate中创建的,在asynctask中应该在哪里创建呢? - metemet06
如果我在postexecute(等等)中使用它,它会在每个页面刷卡时创建适配器吗? - metemet06
我认为你是我现在正在使用的MathFactCar编码器。我需要在FetchFactTask中使用getcurrent item。 - metemet06
由于位置- uri [0] 给出了错误的位置数字。 - metemet06
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)
                }

因此,您不仅要生成一堆并发任务...


3
这个方法被添加到ViewPager中,所以你可以按以下方式使用。
ViewPager viewPager = new ViewPager(...);

...... // set viewpager adapter


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接