Check if fragment is currently visible or no

前端 未结 10 803
悲&欢浪女
悲&欢浪女 2020-12-05 03:10

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:

<
10条回答
  •  抹茶落季
    2020-12-05 03:43

    As far as I have tried I think this will work Please try and let me know. Do something like this in your activity.


    public boolean isFragmentVisible(SwipeAdapter swipeAdapter) {
            SwipeAdapter swipeAdapterA = fragmentA.getViewPagerAdapter();
            BFragment bFragment = (BFragment) swipeAdapterA.getFragment(0);
            if (bFragment != null) {
                SwipeAdapter swipeAdapterB = bFragment.getViewPagerAdapter();
                CFragment cFragment = (CFragment) swipeAdapterA.getFragment(0);
                if (cFragment != null) {
                    SwipeAdapter swipeAdapterC = cFragment.getViewPagerAdapter();
                    DFragment dFragment = (DFragment) swipeAdapterA.getFragment(0);
                    if (dFragment != null) {
                        return dFragment.isFragmentVisible();
                    }
                }
            }
            return false;
        }
    

    Use this class as your viewpager adapter

      class SwipeAdapter extends FragmentPagerAdapter {
            private Map mFragmentTags;
            private FragmentManager mFragmentManager;
    
            private String mPagetile[];
    
            public SwipeAdapter(FragmentManager fm, Context context) {
                super(fm);
                mPagetile = context.getResources().getStringArray(R.array.pageTitle);
                mFragmentManager = fm;
                mFragmentTags = new HashMap<>();
            }
    
            @Override
            public Fragment getItem(int position) {
                switch (position) {
                    case 0:
                        return new "Your_fragment";
                    default:
                        break;
                }
                return null;
            }
    
            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                Object obj = super.instantiateItem(container, position);
                if (obj instanceof Fragment) {
                    Fragment f = (Fragment) obj;
                    String tag = f.getTag();
                    mFragmentTags.put(position, tag);
                }
                return obj;
            }
    
            public Fragment getFragment(int position) {
                String tag = mFragmentTags.get(position);
                if (tag == null)
                    return null;
                return mFragmentManager.findFragmentByTag(tag);
            }
    
            @Override
            public CharSequence getPageTitle(int position) {
                return mPagetile[position];
            }
    
            @Override
            public int getCount() {
                return "Number of fragments";
            }
        }
    

    Now in your DFragment do this

     boolean isVisible=false;
    
            @Override
            public void setMenuVisibility(boolean menuVisible) {
                super.setMenuVisibility(menuVisible);
                isVisible=menuVisible;
            }
    
            public boolean isFragmentVisible(){
                return isVisible;
            }
    

    Let me know if it worked if not let me know the reason.

提交回复
热议问题