2017-02-02 6 views
0

Я реализовал ViewPager, состоящий из 3 фрагментов (0,1,2). когда я делаю setCurrentItem (1), он отображает хороший фрагмент, но не обновляет фрагмент. Если я вручную прокручиваю вкладки 3 на вкладки 2, он хорошо обновляется. Ваша помощь будет действительно оценена, я застрял с одной недели.ViewPager CurrentItem Фрагмент не обновляется

Oncreate() 
pager = (ViewPager) findViewById(R.id.pager); 
     pager.setAdapter(mViewPagerAdapter); 
     pager.setCurrentItem(1,true); 
     mViewPagerAdapter.notifyDataSetChanged(); 
     pager.setOnPageChangeListener(mPageChangeListener); 
    } 


private FragmentPagerAdapter mViewPagerAdapter = new 
FragmentPagerAdapter(getSupportFragmentManager()) { 
    @Override 
    public int getCount() { 
     return TOTAL_PAGES; 
    } 

    // Return the Fragment associated with a specified position. 
    @Override 
    public Fragment getItem(int position) { 
     if (position == 0) { 
      return client_Option_fragment.newInstance(); 
     } else if (position == 1) { 
      return Profil_fragment.newInstance(); 
     } else if (position == 2) { 
      return client_Partenaire_fragment.newInstance(); 
     } 

     return null; 
    } 



    @Override 
    public void destroyItem(android.view.ViewGroup container, int position, 
Object object) { 
     super.destroyItem(container, position, object); 
    }; 

    @Override 
    // To update fragment in ViewPager, we should override getItemPosition()  
method, 
    // in this method, we call the fragment's public updating method. 
    public int getItemPosition(Object object) { 
     if (object instanceof client_Option_fragment) { 
      ((client_Option_fragment) object).update(); 
     } 
     if (object instanceof Profil_fragment) { 
      ((Profil_fragment) object).update(); 
     } 

     if (object instanceof client_Partenaire_fragment) { 
      ((client_Partenaire_fragment) object).update(); 
     } 

     return super.getItemPosition(object); 
    }; 
}; 


    private ViewPager.OnPageChangeListener mPageChangeListener = new 
    ViewPager.OnPageChangeListener() { 
    @Override 
    public void onPageScrolled(int position, float positionOffset, int 
    positionOffsetPixels) { 
    } 

    @Override 
    public void onPageSelected(int position) { 
     mViewPagerAdapter.notifyDataSetChanged(); 
    } 

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

EDIT: Просто нашел решение, я добавил следующий фрагмент кода в OnPageScrolled():

if (start){ 
mViewPagerAdapter.notifyDataSetChanged(); 
start=false; 
} 
+0

Взгляните на нижеприведенных ссылок для решения [http://stackoverflow.com/a/26517867/156790](http://stackoverflow. com/a/26517867/156790) [http://stackoverflow.com/a/26517867/1567907](http://stackoverflow.com/a/26517867/1567907) –

ответ

0

фрагмент в ViewPager не работает так .. Вы должны получить этот фрагмент в getSupportFragmentManager();

это пример того, что я уже делать ..

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

     } 

     @Override 
     public void onPageSelected(int position) { 
      // get all fragment in getSupportFragmentManager 
      Fragment getFragment = getSupportFragmentManager().getFragments().get(position); 
      // Better fragment getter use this below 
      // Fragment page = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + position); 

      if (getFragment instanceof PastEventFragment) { 
       PastEventFragment thisFragment = (PastEventFragment) getFragment; 
       thisFragment.refreshData(); 
      } 

      else if (getFragment instanceof UpcomingEventFragment) { 
       UpcomingEventFragment thisFragment = (UpcomingEventFragment) getFragment; 
       thisFragment.refreshData(); 
      } 

      else if (getFragment instanceof LikedEventListFragment) { 
       LikedEventListFragment thisFragment = (LikedEventListFragment) getFragment; 
       thisFragment.refreshData(); 
      } 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 
+0

Спасибо за ваш ответ, я попробовал, и он такой же , Фактически я автоматически заставляю ViewPager отображать фрагмент 2 с помощью setCurrentItem (1), но Fragment не обновляется, потому что нет noPageSelected или прокручивается. –

Смежные вопросы