Android Studio报错:FragmentTransaction的remove方法参数不兼容求助
解决v4 Fragment无法通过原生FragmentManager移除的问题
嘿,这个问题我太熟了——本质就是v4支持库的Fragment和Android原生的Fragment体系不兼容导致的类型不匹配!
咱们来拆解下问题:
- 你的自定义Fragment继承的是
android.support.v4.app.Fragment(属于v4支持库) - 但
getActivity().getFragmentManager()返回的是android.app.FragmentManager(原生系统的Fragment管理器) - 原生
FragmentTransaction的remove()方法只认android.app.Fragment类型的实例,所以你传this(v4的Fragment)就会报错类型不匹配。
给你两个靠谱的解决办法:
方法一:用v4支持库的FragmentManager(推荐)
直接把getFragmentManager()换成getSupportFragmentManager(),这样拿到的是v4库对应的管理器,就能完美适配你的v4 Fragment了。完整代码应该是:
getActivity().getSupportFragmentManager().beginTransaction().remove(this).commit();
⚠️ 别忘了最后加.commit()!很多人会漏这个,导致事务根本不会执行,Fragment自然关不掉。
另外要注意:你的Activity必须是继承自AppCompatActivity或者FragmentActivity(都是v4支持库的类),不然getActivity()不会有getSupportFragmentManager()这个方法哦。如果你的Activity还是普通的Activity,建议改成AppCompatActivity,这也是现在Android开发的常规做法。
方法二:切换到原生Fragment体系
如果你的项目不需要v4支持库的兼容特性(比如适配低版本系统),可以把自定义Fragment改成继承android.app.Fragment,这样就能直接用getActivity().getFragmentManager()来移除了。不过这种方法只适合不需要兼容Android 4.3及以下版本的项目,现在大部分项目还是更推荐用v4/androidx的支持库。
内容的提问来源于stack exchange,提问作者java
相关产品推荐
相关产品推荐

