检查片段当前是否可见

我知道StackOverflow中有很多类似的问题,但我的问题没有什么不同。

我有嵌套的片段层次结构,如下结构所示:

                                  Activity
                                     |
                                     |
                                 AFragment
                                     |
                                (ViewPager)
                                 |       |         
                                 |       |         
                         BFragment       BFragment  .....
                            |                       
                       (ViewPager)                       
                        |       |                         
                        |       |                         
                 CFragment     CFragment  ...
                     |
                (ViewPager)                       
                  |     |                              
                  |     |                        
           DFragment   DFragment ...

现在我想知道是否正在向用户显示?DFragment

我尝试了很多StackOverflow的解决方案,但未能成功。

我尝试的是:

我试过了,但它在上面的层次结构中返回了多个,这是导致setUserVisibleHint()trueDFragmentViewPager

我也尝试从这些链接:link1link2link3等等...但没有得到实际的解决方案。

等待帮助。谢谢。

更新

适配器类

class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

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

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

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }

答案 1

您可以检查膨胀的片段是否在设备屏幕上可见:View


    Fragment fragment = ... // retrieve from `ViewPager`'s adapter.
    View fragmentRootView = fragment.getView();
    if (fragmentRootView != null && fragmentRootView.getGlobalVisibleRect(new Rect())) {
        // fragment is visible
    } else {
        // fragment is not visible
    }

getGlobalVisibleRect() 如果视图的一部分在根级别可见,则将返回。true


答案 2

试试这个

@Override
    public void setMenuVisibility(final boolean visible) {
        super.setMenuVisibility(visible);
        if (visible) {

        }
        else
        {       

        }
    }

推荐