2015-11-27 2 views
2

У меня есть фрагмент с ViewPager из 4 вкладок и в 4-й вкладке У меня есть еще один ViewPager с 3 вкладки таким образом, что, если каждый раз, когда я переключить topviewPagerTab (один с 4 вкладки), то setUserVisiblehint фрагментов, которые были в sub viewPager (с 3 вкладками), не называется.фрагмент setUserVisibleHint не вызывается в ViewPager внутри anotherViewPager

Таким образом, в действительности фрагменты в суб ViewPager 4-й/последней вкладки не виден пользователю, но setUserVisibleHint() не называется, так что мое логическое значение isMyPageVisible, который был установлен при посещении, что фрагмент всегда верно и для них, если я не переключать вкладки в subviewPager

boolean isPageVisible = false; 

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    isPageVisible = isVisibleToUser; 
} 

ответ

0

проблема заключается в том, что при перемещении между наружными осколков setUserVisibleHint для текущего фрагмента, показывающий во внутреннем ViewPager не называется. Расширьте FragmentStatePagerAdaptor

public class CustomPagerAdaptor extends FragmentStatePagerAdaptor { 
    private Fragment primary; 

    @Override 
    public void setPrimaryItem(ViewGroup container, int position, Object object) { 
     super.setPrimaryItem(container, position, object); 
     primary = (Fragment)object; 
    } 

    public void setUserVisibleHint(boolean isVisible) { 
     if (primary != null){ 
      primary.setUserVisibleHint(isVisible); 
     } 
    } 
} 

И во внешнем фрагменте проходят setUserVisibleHint через:

@Override 
public void setUserVisibleHint(boolean isVisible) { 
    super.setUserVisibleHint(isVisible); 
    if (mAdaptor != null) mAdaptor.setUserVisibleHint(isVisible); 
} 
+0

Итак, мы должны делать это как извне, и нет другого способа сделать это правильно? –

+0

Тогда, если открыть мою четвертую вкладку главного viewpager, тогда все фрагменты внутри subViewPager будут установлены на видимое событие, хотя некоторые из них не ... –

1
public class UserAdapter extends FragmentPagerAdapter 
{ 
    private ArrayList<Fragment> fragments; 

    public UserAdapter(FragmentManager fm, ArrayList<Fragment> fragments) 
    { 
     super(fm); 
     this.fragments = fragments; 
    } 

    public void clearFragment() 
    { 
     fragments.clear(); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return fragments.get(position); 
    } 

    @Override 
    public int getCount() { 
     return fragments.size(); 
    } 


    public void setUserVisibleHint(boolean isUserVisibleHint) 
    { 
     if(viewPagerPojos != null && viewPagerPojos.size() > 0) 
     { 
      for(ViewPagerPojo viewPagerPojo : viewPagerPojos) 
      { 
       viewPagerPojo.getFragment().setUserVisibleHint(isUserVisibleHint); 
      } 
     } 
    } 

} 

и в каждом фрагменте

@Override 
public void setUserVisibleHint(boolean isVisible) { 
    super.setUserVisibleHint(isVisible); 
    if (mAdaptor != null) { 
    mAdaptor.setUserVisibleHint(isVisible); 
    } 
} 

и сублимитами фрагментов

boolean isPageVisible; 

@Override 
public void setUserVisibleHint(boolean isVisibleHint) 
{ 
    isPageVisible = this.isVisible() && isVisibleHint; 
    super.setUserVisibleHint(isPageVisible); 
} 
+0

Этот, кажется, работает, я думаю –

Смежные вопросы