方案一:适用于FragmentPagerAdapter
//Activity中的ViewPager,当前显示的页面序号
int item = theActivity.mViewPager.getCurrentItem();
//"android:switcher:" + R.id.viewpager + ":"+item 这个字符窜表示的就是该//fragment的tag,其中item 是fragment 在viewpager中的位置。
Fragment fragment = theActivity.getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.viewPager + ":"+item);
if (fragment == null){
super.handleMessage(msg);
Log.d("APF_Monitor", "实时信息 获取当前Frament失败 "+item);
return;
}
if (fragment.getView() != null){
//处理该Fragment
}
方案二:
方案一对基于FragmentPagerAdapter的实现是有效的,但对于
FragmentStatePagerAdapter就无效了。因为FragmentStatePagerAdapter不会对
传给FragmentManager的Fragment设置tag.
ViewPager pager = (ViewPager)findViewById(R.id.viewpager);
FragmentStatePagerAdapter f = pager.getAdapter();
SomeFragment someFragment = (SomeFragment)f.instantiateItem(pager,position);
instantiateItem(pager,position)方法会返回在position位置的fragment的引用。如果该fragment 已经实例化了,再次调用instantiateItem(pager,position)的时候,该方法并不会调用getItem()来再次实例化fragment,而是直接返回引用。
参考文章: