Android:ViewPager + Fragments:修改片段视图" onPageScrolled"

时间:2017-07-27 08:18:34

标签: android android-fragments android-viewpager

嗯,我认为标题是非常自我解释的。我的ViewPager中有HomeActivity,ViewPager目前包含5个片段。

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

经过一些研究,似乎我找不到一个好方法来沟通 HomeActivity - > ViewPager中的碎片

我很容易解决了在ViewPager中的片段 - >方向的沟通HomeActivity 使用Interface,但这个技巧似乎不适用于另一个方向。

我可以使用FragmentStatePagerAdapter

上的方法每次访问当前显示的片段
public Fragment getActiveFragment(int position){
    return myFragmentsList.get(position);
}

但是,通过这样做,我必须将每个Fragment投放到其班级MyFragment1 MyFragment2 MyFragment3 ....

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

   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) {}
    });

1 个答案:

答案 0 :(得分: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()