Jetpack Compose中使用AndroidFragment<>加载Fragment遇异常求助
解决AndroidFragment在Compose中抛出"View is not within a subclass of FragmentActivity"异常
核心问题
你的MainActivity继承的是ComponentActivity,而AndroidFragment组件要求宿主Activity必须是FragmentActivity的子类(AppCompatActivity是FragmentActivity的子类,也可使用),否则无法获取Fragment所需的FragmentManager,从而触发该异常。
解决方案
将MainActivity的父类从ComponentActivity改为AppCompatActivity,并确保导入正确的包。
修改后的MainActivity.kt
import androidx.appcompat.app.AppCompatActivity import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.fragment.app.compose.AndroidFragment class MainActivity : AppCompatActivity() { // 替换父类为AppCompatActivity override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContent { DriveTestAceTheme { Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> Greeting( name = "Android", modifier = Modifier.padding(innerPadding) ) } } } } @Composable fun Greeting(name: String, modifier: Modifier = Modifier) { AndroidFragment<TestFragment>( modifier = Modifier.fillMaxSize() ) } }
额外注意点
- 确认
build.gradle.kts中包含appcompat依赖(新建项目通常默认包含,若缺失需手动添加):
implementation("androidx.appcompat:appcompat:1.7.0") // 版本号可根据最新稳定版调整
- 你的
TestFragment中Toast代码缺少show()调用,点击事件不会生效,需修正:
binding.tvOne.setOnClickListener { Toast.makeText(context, "Button Has Been Clicked! Yipeee!!!!", Toast.LENGTH_LONG).show() // 添加.show() }
内容的提问来源于stack exchange,提问作者kaalanama kaal
相关产品推荐
相关产品推荐

