Android开发:添加Fragment至SectionsPageAdapter时类型不匹配错误解决
Android Fragment类型不匹配问题:原因与解决方案
嘿,这个问题我之前也帮不少开发者排查过,本质就是Fragment的两个不同版本包不兼容导致的类型不匹配,咱们一步步拆解:
错误原因
你这里出现类型不匹配的核心问题是:
SectionsPageAdapter继承的FragmentPagerAdapter来自android.support.v4.app包,它要求管理的Fragment必须是android.support.v4.app.Fragment类型- 但你的
HomeFragment、Friends、Messages类继承的是android.app.Fragment,这是Android原生框架里的Fragment类
这两个Fragment是完全不同的类,属于不同的继承体系,就像两个名字一样但身份不同的人,所以adapter.addFragment()自然会报类型不匹配的错误。
解决方法
有两种可行的解决方案,你可以根据自己的项目需求选择:
方案一:统一使用v4兼容包的Fragment(推荐,适配更多系统版本)
这是最常用的解决方式,能让你的App兼容更低版本的Android系统:
- 修改
HomeFragment、Friends、Messages的继承类,把extends android.app.Fragment改成extends android.support.v4.app.Fragment - 替换这些类里的import语句,把
import android.app.Fragment;改成import android.support.v4.app.Fragment; - 在
HomeActivity中获取FragmentManager时,使用getSupportFragmentManager()而不是getFragmentManager()
方案二:统一使用原生框架的Fragment
如果你的项目只需要适配较高版本的Android系统(比如API 11及以上),可以选择这种方式:
- 修改
SectionsPageAdapter的继承类,把extends android.support.v4.app.FragmentPagerAdapter改成extends android.app.FragmentPagerAdapter - 替换
SectionsPageAdapter里的import语句:- 把
import android.support.v4.app.FragmentPagerAdapter;改成import android.app.FragmentPagerAdapter; - 把
import android.support.v4.app.Fragment;改成import android.app.Fragment;
- 把
- 在
HomeActivity中获取FragmentManager时,使用getFragmentManager()即可
内容的提问来源于stack exchange,提问作者Saurabh Kumar
相关产品推荐
相关产品推荐

