2013-04-16 3 views
2

Я получаю позицию, пропустив ее от pageradapter (до asyctask)ViewPager: получение текущей позиции пункт

instantiateItem (Просмотр коллекции, внутр поз) {.Execute (поз);}

Но когда я сажусь на предыдущую страницу, он держит неправильную позицию, Как я могу получить правильную предыдущую позицию?

Возможно, я могу использовать 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

Работает с моей основной активностью. Но я хочу использовать его в классе asynctask. Итак, как я могу создать новый адаптер в асинхронном файле. В MainActivity я создал его в oncreate, в asynctask: где? – metemet06

+0

, если я использую его в postexecute (и т. Д.), Он создаст адаптер, который каждую страницу разворачивает? – 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()); 
Смежные вопросы