在另一个ViewPager中的Viewpager内部,fragment的setUserVisibleHint方法没有被调用

4

我有一个带有4个选项卡ViewPager的片段,在第4个选项卡中,我有另一个有3个选项卡的ViewPager,每当我切换我的顶部ViewPager选项卡(有4个选项卡)时,子ViewPager中的片段的setUserVisibleHint不会被调用

因此,实际上,第4/最后一个选项卡中的子ViewPager中的片段对用户不可见,但是setUserVisibleHint()没有被调用,所以我的布尔值isMyPageVisible在访问该片段时被设置为true,除非我在子ViewPager中切换选项卡。

boolean isPageVisible = false;

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

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
问题在于当您在外部片段之间移动时,内部ViewPager中显示的当前片段的setUserVisibleHint不会被调用。 扩展您的FragmentStatePagerAdapter。
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);
}

那么我们必须像外部要求的那样做,没有其他方法可以做对吗? - Prasanna prasilabs
如果打开主视图页面的第四个选项卡,那么子ViewPager中的所有片段都将被设置为可见,即使其中一些片段不是... - Prasanna prasilabs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接