Android使用getSupportFragmentManager遇Fragment类型不匹配错误求助
问题原因与解决方案
错误的核心是Fragment的导入包不匹配:你在MainActivity里导入的是旧版的android.app.Fragment,但你的MapFragment继承的是AndroidX的androidx.fragment.app.Fragment,而getSupportFragmentManager()属于AndroidX的Fragment框架,只能接受AndroidX类型的Fragment实例,所以出现类型不兼容的报错。
修复步骤:
- 修改MainActivity的导入语句,替换旧的Fragment包为AndroidX版本,同时删除错误导入的
com.google.android.gms.maps.MapFragment(你自己的类是MapFragment,不需要导入谷歌的同名类)。 - 确保Fragment变量的类型是AndroidX的
Fragment。
修改后的MainActivity.java代码:
package com.example.mapinfragment; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; // 替换为AndroidX的Fragment import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Initialise fragment Fragment fragment = new MapFragment(); //Open fragment getSupportFragmentManager() .beginTransaction() .replace(R.id.frame_layout,fragment) .commit(); } }
额外说明:
- Android开发现在推荐统一使用AndroidX组件,避免旧版framework组件和AndroidX组件混用,这类类型不匹配的问题很常见,记住
getSupportFragmentManager()对应AndroidX的androidx.fragment.app.Fragment,而getFragmentManager()对应旧版的android.app.Fragment,两者不能交叉使用。 - 你的
MapFragment和布局里的SupportMapFragment都是正确的AndroidX用法,只需要修正MainActivity的导入即可解决问题。
内容的提问来源于stack exchange,提问作者Vleis
相关产品推荐
相关产品推荐

