2013-04-16 151 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());