在另一个 ViewPager 可见的片段内检测 ViewPager 中的片段

Detect Fragment in ViewPager inside a Fragment of another ViewPager visible

比如我有

MainActivity (contain a ViewPager)
  Fragment0
  Fragment1 (contain a ViewPager)
          Fragment1a
          Fragment1b
  Fragment2

我想在每次看到 Fragment1a 时刷新它,所以我在 Fragment1a 中使用 setUserVisibleHint 但效果不佳。

当我在片段 Fragment1aFragment1b 之间切换时,Fragment1asetUserVisibleHint 被调用
但是,当我从片段 Fragment0Fragment1Fragment2Fragment1 setUserVisibleHint of Fragment1a (and Fragment1b) not called

如何检测 Fragment1a (and Fragment1b) 可见?任何帮助或建议将不胜感激。

setUserVisibleHint 也对我不起作用我使用另一种方法在查看寻呼机更改片段时更新片段中的数据,下面是方法,

 viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                }

                @Override
                public void onPageSelected(int position) {
                    try {
                        if(viewPagerAdapter.getItem(position) instanceof Fragment1a){
                            Fragment1a frag1 = (Fragment1a) viewPagerAdapter.getItem(position);
                            frag1.updateData(data); // here is the public method of fragment which declared for udpate data in fragment
                        }else if(viewPagerAdapter.getItem(position) instanceof Fragment1b){
                            Fragment1b frag2 = (Fragment1b) viewPagerAdapter.getItem(position);
                            frag2.updateData(data); // here is the public method of fragment which declared for udpate data in fragment
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }

                @Override
                public void onPageScrollStateChanged(int state) {
                }
            });
viewpager.setCurrentItem(0);

这样你可以直接更新数据只需要在你的片段中创建一个public方法。

这是适配器

class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<TabModel> 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, TabModel title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

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

    }