Error:(26, 117) 错误: 不兼容的类型: Fragment无法转换为NewsContentFragment 解决方法

时间:2021-08-29 20:39:56

在用Android Studio 编写碎片程序的时候出现了以下错误:


Error:(26, 117) 错误: 不兼容的类型: Fragment无法转换为NewsContentFragment 解决方法
图1
碎片程序如下:

Error:(26, 117) 错误: 不兼容的类型: Fragment无法转换为NewsContentFragment 解决方法
图2
在下面程序调用时类型转换出错

Error:(26, 117) 错误: 不兼容的类型: Fragment无法转换为NewsContentFragment 解决方法
图3
刚开始以为代码哪里写错了,对着书本仔细检查了好多遍,还是没找出哪里出错了。回过头来再看错误提示信息,说是类型转换错误,更是摸不到头脑,自己明明是继承了Fragment类,怎么会出错。突然想起来书中好像有说继承Fragment类有两种方式,会不会在这出了问题。果然是这样。当继承Fragment时,会有两个不同包下的Fragment供我们选择, 一个是系统内置的android.app.Fragment,一个是support-v4库中的android.support.v4.app.Fragment,但是建议使用后者,因为它可以让碎片在所有Android系统版本中保持功能一致性。我们并不需要在build.gradle文件中添加support-v4库依赖,因为build.gradle文件中已经添加appcompat-v7库的依赖,而这个库会将support-v4库也一起引入进来。
我程序中Fragment是继承自android.app.Fragment的,在下面的语句中我使用了getSupportFragmentManager()这个方法,
NewsContentFragment newsContentFragment = (NewsContentFragment) getSupportFragmentManager().findFragmentById(R.id.news_content_fragment);
显然这个方法是对应android.support.v4.app.Fragment包的,不出错才怪。
终上所述,有两个方法可以解决这个问题:
1、将图3代码中getSupportFragmentManager()方法改为android.app.Fragment对应的getFragmentManager()
2、将图2代码顶部的import android.app.Fragment改为import android.support.v4.app.Fragment
强烈建议采用第二种方法来保证程序的兼容性。