关于No view found for id 0x7f080135 (com.xxx.xxx:id/viewpager) for fragment PopupWindow

最近在开发项目中,遇到了一个问题。PopupWindow中无法嵌套viewpager+Fragment,现在进行总结一下。

问题描述:在Fragment中弹出一个PopupWindow,PopupWindow中用viewpager加载多个Fragment时出现上面问题。

网上搜的都是那些什么没有设置id之类的东西,或者getSupportFragmentManager()替换成getChildFragmentManager()之类的,但是这个问题不是在这里。调试了源码看到FragmentManager是属于activity的,而popwindow是使用了其他的layout,所以FragmentManager找不到viewpager的id。

问题原因分析:因为FragmentAdapter传入的是Activity的FragmentManger,所以默认是在Activity的布局xml中寻找ViewPager的定义,但是实际上它是在弹出的View里定义的。

解决方法:前三个都是网上推荐的,本人用的是方法二;后来自己研究了一下,得出方法四。

方法一:放弃使用PopupWindow使用DialogFragment

方法二:不要用fragment在popupwindow中 ,可以换成view在pageadaper中

方法三:既然在popwindow获取不了对应的FragmentManager,换个思路,先在popwindow中放一个fragment,再 在这个fragment中放viewpager+fragment,fragment中获取的FragmentManager,使用getChildFragmentManager()。问题解决了。

方法四:重写activity的findviewbyid 方法,fragment的寻找id的方式是用activity找的。如图

关于No view found for id 0x7f080135 (com.xxx.xxx:id/viewpager) for fragment PopupWindow_第1张图片




你可能感兴趣的:(android)