2015-02-18 6 views
0

Я реализовал в своем приложении ViewPager для перемещения между фрагментами. После долгих исследований я обнаружил, что если я хочу, чтобы получить позицию видимого фрагмента следует использовать:Получить позицию ViewPager на первом и последнем видимом фрагменте

mViewPager.getCurrentItem(); 

Но по какой-то причине, когда я на первом или последнем фрагменте, положение Безразлично» t изменение. Он остается 1 на первом фрагменте вместо 0, соответственно размером - 2 для последнего, вместо размера - 1. (В случае первого фрагмента теория применима только тогда, когда я запускаю ViewPager из другой позиции из первый)

Как я могу получить первую и последнюю позицию ViewPager. Я даже пытался отправить позицию из ViewPagerAdapter, но здесь я имею дело с тем же, поскольку последнее изменение позиции происходит до первого или последнего фрагмента.

Любые предложения?

+0

Это кажется связаны: http://stackoverflow.com/questions/24650223/mviewpager-getcurrentitem-doesnt-return-correct-position -for-first-last-pag – Whitney

ответ

1

В YourPagerActivity.class добавить слушателя создать метод

viewPager = (ViewPager) findViewById(R.id.view_pager); 
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageSelected(int position) { 
      String positions=position + ""; 

      Toast.makeText(YourPagerActivity.this, positions, Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 
     } 
    }); 
+0

Я пробовал этот пример, но он работает, только если ViewPager запускается в позиции 0. Если я запустил ViewPager в любой другой позиции, он не работает правильно – Phantom

+0

Он работает со всех st artpositions. Где и как вы устанавливаете отправку пейджера? – eurosecom

+0

, я установил начальную позицию в Activity, как это mViewPager.setCurrentItem (Start); – Phantom

0

Вы не можете поместить слушателя фрагмент. Поместите setOnPageChangeListener в OnCreate метод в YourPagerActivity.class

@Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_reklamapager); 


     new yourAdapterAsync().execute(); 

    viewPager = (ViewPager) findViewById(R.id.view_pager); 
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
    @Override 
    public void onPageSelected(int position) { 
     String positions=position + ""; 

     Toast.makeText(YourPagerActivity.this, positions, Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 
    } 
}); 

    } 

и в onpostexecute из yourAdapterAsync установить StartPosition

protected void onPostExecute(String file_url) { 
      // dismiss the dialog 
      pDialog.dismiss(); 

      // updating UI from Background Thread 
       runOnUiThread(new Runnable() { 
       public void run() { 

        ImageAdapterFromRes adapter = new ImageAdapterFromRes(YourPagerActivity.this, textArray, urlArray, bitmapArray); 
        viewPager.setAdapter(adapter); 

        viewPager.setCurrentItem(startposition); 

       } 
      }); 
+0

Спасибо за ваши усилия, я бы сделал это в своей деятельности, но мне нужно значение позиции в фрагменте. Поскольку позиция должна измениться от фрагмента к фрагменту, оттуда я могу только перенести первую позицию, нажав, так как в моем фрагменте я получаю пакеты из FragmentPagerAdapter. – Phantom

+0

Хорошо, но getCurrentItem и setCurrentItem работают только в PagerActivity. В PagerAdapter вы получаете фактическую позицию в общедоступном объекте instantiateItem (коллекция ViewGroup, int position) ... вряд ли поможет без вашего кода ... – eurosecom

0

ViewPager.setOnPageChangeListener осуждается в настоящее время. Вместо этого нужно использовать ViewPager.addOnPageChangeListener.

, например,

ViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 

REFRENCE

0
oncreate  
leftNav.setVisibility(View.GONE); 

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
       Log.e("pos","pos "+position); 
       if (position == 0) { 
        leftNav.setVisibility(View.GONE); 
        rightNav.setVisibility(View.VISIBLE); 
       }else if (position == 5) { //inplace of 5 u can use your dynmic value 
        leftNav.setVisibility(View.VISIBLE); 
        rightNav.setVisibility(View.GONE); 
       }else if (position > 0 || position <5){ 
        leftNav.setVisibility(View.VISIBLE); 
        rightNav.setVisibility(View.VISIBLE); 
       } 
      } 

      @Override 
      public void onPageSelected(int position) { 
       Log.e("poss","poss "+position); 

      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 
       Log.e("possss","posssss "+state); 
      } 
     });