迁移旧Fragment应用到Jetpack Compose时Activity遇InflateException问题
解决Jetpack Compose Activity启动时因screen_simple.xml引发的崩溃
问题核心
你错误地沿用了Fragment的onCreateView实现方式返回ComposeView,导致系统尝试往该View中添加原生视图(来自系统默认的screen_simple.xml),而ComposeView不支持添加子原生视图,触发崩溃。
修复步骤
- 移除
onCreateView的重写:Activity不需要重写这个方法,这是Fragment特有的逻辑。 - 在
onCreate中使用setContent设置Compose内容:这是Compose Activity的标准初始化方式。
正确代码示例
class FrameActivity : AppCompatActivity(), KoinComponent { lateinit var navController: NavHostController private val viewModel: MainNavigationViewModel by viewModel() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 初始化导航控制器(根据实际需求调整,比如结合ViewModel或导航图) navController = NavHostController(this).apply { setGraph(R.navigation.your_nav_graph) } setContent { // 全局MaterialTheme,保留你需要的主题样式 MaterialTheme( colorScheme = MaterialTheme.colorScheme, typography = MaterialTheme.typography ) { Scaffold { innerPadding -> NavHost( navController = navController, startDestination = "your_initial_route", modifier = Modifier.padding(innerPadding) ) { // 注册你的Compose页面路由 composable("your_initial_route") { // 页面内容 } } } } } } }
额外说明
- 你当前设置的
Theme.Material3.Light.NoActionBar主题完全可用,无需修改或移除,问题与主题、过渡动画无关。 - 替换为
ComponentActivity时,代码逻辑保持一致,仅需修改父类继承。
内容的提问来源于stack exchange,提问作者Kabliz
相关产品推荐
相关产品推荐

