2017-07-27 24 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