2017-02-02 105 views
0

我实现了由3个片段(0,1,2)组成的ViewPager。当我做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) { 
    } 
}; 

编辑: 就找到了解决办法,我添加下面的代码片段中OnPageScrolled():在viewpager

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

片段不是这样的工作..你需要得到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显示Fragment 2与setCurrentItem(1),但片段不更新,因为没有页面选择或滚动。 –