【问题标题】:Android: ViewPager + Fragments: modify fragment view when "onPageScrolled"Android:ViewPager + Fragments:“onPageScrolled”时修改片段视图
【发布时间】:2017-07-27 16:48:58
【问题描述】:

嗯,我认为标题是不言自明的。我的HomeActivity 中有一个ViewPager,ViewPager 目前包含 5 个片段。

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

经过一番研究,我似乎找不到一个很好的方式来沟通HomeActivity --> ViewPager中的片段

我使用Interface轻松解决了Fragments in ViewPager --> HomeActivity方向的通信,但这个技巧似乎不适用于另一个方向。

我可以每次使用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) {}
    });

【问题讨论】:

    标签: android android-fragments android-viewpager


    【解决方案1】:

    定义一个接口,

    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()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多