使用 Jetpack Compose 显示解析器树

问题描述 投票:0回答:1

我在 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)
                    }

                }

            }


        }

    }
}
android kotlin android-jetpack-compose stanford-nlp
1个回答
0
投票

我怀疑原因是递归

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)
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.