我在 Android Studio 中使用斯坦福的解析器。我想使用 Jetpack Compose 以树的形式显示解析后的句子,我创建了两个类来实现此目的。
我目前遇到的问题是,当我按下按钮来解析句子时,它会加载大约 3 秒,然后崩溃。我想知道为什么显示器不工作。如果有人回答的话真的很有帮助。
首先,我有 Tree.kt 类,它创建并加载树的显示。
@Composable
fun DisplayTree(tree: Tree, level: Int = 0) {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(start = level.dp * 8)
) {
Text(tree.value(), style = MaterialTheme.typography.h6)
if (tree.children().isNotEmpty()) {
LazyColumn {
items(tree.children()) { child ->
DisplayTree(child, level + 1)
}
}
}
}
}
@Composable
fun SyntaxTreeScreen(sentence: String?) {
val tree = createDependencyTree(sentence)
Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp)
) {
DisplayTree(tree)
}
}
然后是 SecondScreen 类,在其中创建并解析输入
@SuppressLint("UnusedMaterialScaffoldPaddingParameter", "UnrememberedMutableState")
@ExperimentalCoilApi
@ExperimentalCoroutinesApi
@ExperimentalPermissionsApi
@Composable
fun secondScreenText(navController: NavHostController, text : String?) {
val scaffoldState = rememberScaffoldState()
Scaffold(
scaffoldState = scaffoldState,
topBar = {
TopAppBar(
title = { },
backgroundColor = Color(0xFFFFFFFF),
contentColor = Color(0xFF000000),
elevation = 0.dp,
navigationIcon = {
IconButton(onClick = {
if (text!! != "") {
navController.popBackStack()
navController.navigate(AppScreens.FirstScreen.route)
}
}) {
Icon(Icons.Default.ArrowBackIos, contentDescription = null)
}
})
}
) {
Box(
contentAlignment = Alignment.CenterStart, modifier = Modifier
.fillMaxSize()
.background(Color(0xFFFFFFFF))
) {
Column(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.SpaceEvenly,
modifier = Modifier
.fillMaxSize()
.padding(start = 40.dp, end = 40.dp, top = 40.dp)
) {
Text(
text = "Análisis",
fontFamily = Inter,
fontSize = 28.sp,
modifier = Modifier.weight(0.25f)
)
Box(
modifier = Modifier
.fillMaxSize()
.background(Color(0XFFF0F0F0), shape = RoundedCornerShape(25.dp))
.weight(1f)
.padding(start = 20.dp, end = 20.dp, top = 20.dp),
contentAlignment = Alignment.Center
) {
Column(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
AutoResizedText(text = text!!, modifier = Modifier.weight(1f), maxLines = 1)
SyntaxTreeScreen(sentence = text)
}
}
}
}
}
}
我怀疑原因是递归
LazyColumn
。尝试用常规的Column
替换它:
@Composable
private fun DisplayTree(tree: Tree, level: Int = 0) {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(start = level.dp * 8)
) {
Text(tree.value(), style = MaterialTheme.typography.h6)
for (child in tree.children()) {
DisplayTree(child, level + 1)
}
}
}