如何正确增加 LazyColumn 中的变量

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

我想用硬编码数据制作简单的 30 天应用程序,但我有代表当天的变量,我想增加它,但当我这样做时,它做得不太正确。

@Composable
fun _30DaysApp() {
    var curDay by remember { mutableStateOf(1) }
    Scaffold(topBar = {
    }) { it ->
        LazyColumn(contentPadding = it) {
            items(tasks) {
                CardTask(task = it, day = curDay)

            }
        }
    }
}

@Composable
fun CardTask(task: Task, day: Int, modifier: Modifier = Modifier) {
    var expand by remember { mutableStateOf(false) }
    Card(shape = RoundedCornerShape(16.dp)) {
        Column(
            modifier = modifier
                .padding(12.dp)
        ) {
            Row {
                Text(text = stringResource(R.string.day, day))
                Spacer(modifier = modifier.weight(1f))
                ExpandButton(expanded = expand, onClick = { expand = !expand })
            }
            Text(text = stringResource(task.articleRes))
            Spacer(modifier = Modifier.size(8.dp))
            Image(
                painter = painterResource(task.imageRes), contentDescription = null,
                contentScale = ContentScale.Fit
            )
        }
    }
}

尝试将其提升到 CardTask 功能,但仍然无法正常工作。有人可以帮我吗?

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

我已经在您的代码中发现了问题。当您尝试增加当前日期变量 (

curDay
) 时,它似乎没有正确更新。为了解决这个问题,您可以使用
LaunchedEffect
来观察当天变量的变化并相应地触发更新。您可以通过以下方式修改代码来实现此目的:

@Composable
fun _30DaysApp() {
    var curDay by remember { mutableStateOf(1) }
    
    // Use LaunchedEffect to observe changes to curDay and trigger updates
    LaunchedEffect(curDay) {
        // Any logic to update curDay can be placed here
        // For example, incrementing curDay by 1
        curDay++
    }
    
    Scaffold(topBar = {
    }) { it ->
        LazyColumn(contentPadding = it) {
            items(tasks) {
                CardTask(task = it, day = curDay)
            }
        }
    }
}

@Composable
fun CardTask(task: Task, day: Int, modifier: Modifier = Modifier) {
    var expand by remember { mutableStateOf(false) }
    Card(shape = RoundedCornerShape(16.dp)) {
        Column(
            modifier = modifier
                .padding(12.dp)
        ) {
            Row {
                Text(text = stringResource(R.string.day, day))
                Spacer(modifier = modifier.weight(1f))
                ExpandButton(expanded = expand, onClick = { expand = !expand })
            }
            Text(text = stringResource(task.articleRes))
            Spacer(modifier = Modifier.size(8.dp))
            Image(
                painter = painterResource(task.imageRes), contentDescription = null,
                contentScale = ContentScale.Fit
            )
        }
    }
}

通过使用 LaunchedEffect,curDay 变量每当发生变化时都会更新,确保它正确递增并触发 UI 中的更新。这应该可以解决您当前所面临的未按预期更新的问题。

© www.soinside.com 2019 - 2024. All rights reserved.