布局填充错误:Fragment类填充失败问题求助
老兄,我帮你排查下这个报错问题!你遇到的android.view.InflateException: Binary XML file line #6: Error inflating class Fragment,结合你移除<Fragment>标签就正常的情况,大概率是这几个常见原因导致的,咱们一个个来解决:
最可能的原因:XML标签大小写错误
Android的XML布局标签是严格区分大小写的!你写的<Fragment>首字母大写是错误的,正确的标签应该是全小写的<fragment>。系统会把大写的Fragment当成一个自定义View类来找,自然找不到,就抛出InflateException了。
其他需要排查的点
如果改了大小写还是报错,再检查下面这几个地方:
必须指定Fragment的完整类路径
在XML里声明Fragment时,一定要通过android:name属性指定Fragment类的全限定名,比如:<fragment android:id="@+id/my_fragment" android:name="com.mycompany.myapp.MyFragment" android:layout_width="match_parent" android:layout_height="match_parent" />没加这个属性的话,系统不知道要加载哪个Fragment类,肯定会报错。
Fragment的布局文件是否有错误
检查你的Fragment对应的布局文件,有没有引用不存在的资源、写错标签或者属性,这些都会导致InflateException。Support/AndroidX库的适配问题
如果你用的是AndroidX或老版support库的Fragment(比如androidx.fragment.app.Fragment),要确保你的MainActivity继承的是AppCompatActivity,而不是原生的Activity。同时XML里的<fragment>标签要正确对应库中的Fragment类。
额外推荐:动态添加Fragment的灵活方式
如果你后续需要动态添加元素,其实更推荐用代码动态添加Fragment,这样不需要在XML里声明,步骤如下:
- 在main.xml里加一个FrameLayout作为容器:
<FrameLayout android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" />
- 在MainActivity的onCreate方法里添加Fragment:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 只在首次创建时添加Fragment,避免屏幕旋转时重复添加 if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.fragment_container, new MyFragment()) .commit(); } }
这样就可以灵活地动态管理Fragment的添加、替换了。
内容的提问来源于stack exchange,提问作者xYuri

