检查片段当前是否可见或不可见 [英] Check if fragment is currently visible or no

查看:25
本文介绍了检查片段当前是否可见或不可见的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

 活动||片段|(ViewPager)||||BFragment BFragment .....|(ViewPager)||||CFragment CFragment ...|(ViewPager)||||DFragment DFragment ...

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

我尝试了 StackOverflow 的很多解决方案,但都没有成功.

我尝试的是:

我尝试了 setUserVisibleHint() 但它返回 true 用于上述层次结构中的多个 DFragment,这是 ViewPager

我也从这些链接中尝试过:link1, link2,link3 等等......但没有得到实际解决方案.

等待帮助.谢谢.

更新

适配器类

class ViewPagerAdapter 扩展 FragmentPagerAdapter {私人最终列表<片段>mFragmentList = new ArrayList<>();私有最终列表mFragmentTitleList = new ArrayList<>();公共 ViewPagerAdapter(FragmentManager 管理器){超级(经理);}@覆盖公共片段 getItem(int position) {返回 mFragmentList.get(position);}@覆盖公共 int getCount() {返回 mFragmentList.size();}public void addFragment(Fragment fragment, String title) {mFragmentList.add(fragment);mFragmentTitleList.add(title);}@覆盖公共 CharSequence getPageTitle(int position) {返回 mFragmentTitleList.get(position);}}

解决方案

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

<前><代码>Fragment fragment = ...//从`ViewPager` 的适配器中检索.查看 fragmentRootView = fragment.getView();if (fragmentRootView != null && fragmentRootView.getGlobalVisibleRect(new Rect())) {//片段可见} 别的 {//片段不可见}

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

I know there are lots of similar questions in StackOverflow but my question is little different.

I have nested hierarchy of Fragments like in below structure:

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

Now i want to know that whether DFragment is showing to user or not?

I tried lots of solution from StackOverflow but couldn't get sucess.

What i tried is:

I tried setUserVisibleHint() but it returns truefor multiple DFragment in above hierarchy which is a cause of ViewPager

I also tried from these links: link1, link2, link3 and so on... but did not got actual solution.

Waiting for help. Thank you.

UPDATE

Adapter Class

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);
        }
    }

解决方案

You can check, whether the View that fragment inflated is visible on the device's screen:


    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() will return true if part of the view is visible at the root level.

这篇关于检查片段当前是否可见或不可见的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆