2017-07-27 27 views
2

嗯,我认为标题是相当自我解释。我在HomeActivity中有一个ViewPager,此时ViewPager包含5个片段。Android:ViewPager +碎片:修改片段视图时,“onPageScrolled”

当通过调用ViewPager的onPageScrolled可见其中一个片段时,我想根据HomeActiviy中的某些条件修改当前显示片段中的一些视图。

经过一番研究,好像我找不到方向沟通的好方法HomeActivity - > ViewPager内的碎片

我已经很容易地解决了方向上的通信ViewPager中的片段 - > HomeActivity使用Interface但这个技巧似乎没有在另一个方向工作。

我每次访问使用方法目前显示的片段在我FragmentStatePagerAdapter

public Fragment getActiveFragment(int position){ 
    return myFragmentsList.get(position); 
} 

然而,通过这样做,我会每个Fragment铸成类MyFragment1MyFragment2MyFragment3 ....

任何简单的干净的方式来实现这一目标?这里是代码的相关部分:

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

      if (currentStatus == 1){ 
      Fragment activeFrag = mPagerAdapter.getActiveFragment(mPager.getCurrentItem()); 
      //here I would like to modify one of the 5 fragments 

     } 
     @Override 
     public void onPageSelected(int position) {} 

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

回答

3

定义一个接口,

interface FragmentListenerInterface { 
    public void onFragmentSelected(); 
} 

实现你所有的碎片这个接口。改变fragment和viewpager之间的通信。编写一个方法来返回fragmentlistenerinterface而不是fragment。

public FragmentListenerInterface getActiveFragment(int position){ 
     return (FragmentListenerInterface) myFragmentsList.get(position); 
} 

在此之后只是说,在你的代码

public void onPageSelected(int position) { 
    mViewPager.getActiveFragment(position).onFragmentSelected(); 
} 

,并在每个片段执行onFragmentSelected()

+0

它似乎工作正常,谢谢! – codeKiller