2013-04-16 154 views
2

我越来越位置从pageradapter传递(以asyctask)Viewpager:获取当前项目位置

instantiateItem(查看收集,诠释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

我不太明白你在做什么,为什么'getCurrentItem()'为你工作? – FoamyGuy

+0

它适用于我的MainActivity。但我想在我的asynctask课程中使用它。那么如何在asynctask文件中创建一个新的适配器。在MainActivity中,我使用asynctask创建了oncreate:where? – metemet06

+0

如果我在postexecute(etc)中使用它,它会创建适配器每个页面swips? – metemet06

回答

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) 
       } 

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

3

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

ViewPager viewPager = new ViewPager(...); 

...... // set viewpager adapter 


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