android 我尝试使用jetpack compos和我设计简单的应用程序显示一个任务列表,每一个都有一个可扩展的按钮显示信息,但不工作

5gfr0r5j  于 2023-05-05  发布在  Android
关注(0)|答案(1)|浏览(115)

我尝试使用喷气背包合成和我设计简单的应用程序显示任务列表每一个有一个可扩展的按钮显示信息,但不工作在所有其可点击,但什么也没发生,当我试图点击它只是动画,使你知道,图标被点击,但没有其他这里是我的代码MainActivity.kt

package com.example.thirtydayoftasks

import android.annotation.SuppressLint
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import androidx.compose.animation.animateContentSize
import androidx.compose.animation.core.Spring
import androidx.compose.animation.core.spring
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Card
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Scaffold
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ExpandLess
import androidx.compose.material.icons.filled.ExpandMore
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.example.thirtydayoftasks.model.Task
import com.example.thirtydayoftasks.model.tasks
import com.example.thirtydayoftasks.ui.theme.ThirtyDayOfTasksTheme

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            ThirtyDayOfTasksTheme {
                ThirtyDayOfTasksApp()
            }
        }
    }
}
@SuppressLint("UnusedMaterialScaffoldPaddingParameter")
@Composable
fun ThirtyDayOfTasksApp() {
    Scaffold(
        topBar = {
            ThirtyDayOfTasksTopAppBar()
        }
    ) {

        LazyColumn(modifier = Modifier.background(MaterialTheme.colors.background)) {
            items(tasks) {
                TaskItem(task = it)
            }
        }
    }
}

@Composable
fun TaskItem(
    task: Task,
    modifier: Modifier = Modifier
){
    var expanded by remember { mutableStateOf(false) }
    Card(
        modifier = modifier.padding(8.dp),
       elevation = 4.dp
    ) {

        Column(
            modifier = Modifier
                .animateContentSize(
                    animationSpec = spring(
                        dampingRatio = Spring.DampingRatioMediumBouncy,
                        stiffness = Spring.StiffnessLow
                    )
                )) {
            Column (
            modifier = Modifier
                .fillMaxWidth(),
                horizontalAlignment = Alignment.CenterHorizontally
            ) {
                TaskDay(dayRes = task.dayRes)
                TaskImage(imageRes = task.imageRes)
                TaskTitle(titleRes = task.titleRes)
            }
            DescriptionIcon(expanded = expanded, onClick = { expanded = !expanded })
            if (expanded){
                TaskDescription(descriptionRes = task.descriptionRes)
            }
        }
    }
}

@Composable
fun ThirtyDayOfTasksTopAppBar(
    modifier: Modifier = Modifier
){
    Row(
        modifier = modifier
            .fillMaxWidth(),
        horizontalArrangement = Arrangement.Center
    ) {
        Text(
            text = stringResource(id = R.string.app_name),
            style = MaterialTheme.typography.h1
        )
    }
}

@Composable
fun TaskDescription(
    @StringRes descriptionRes:Int,
    modifier: Modifier = Modifier
){
    Text(
        text = stringResource(id = descriptionRes),
        modifier = modifier
            .padding(8.dp),
        style = MaterialTheme.typography.body2
    )
}


@Composable
fun TaskDay(
    @StringRes dayRes:Int,
    modifier: Modifier = Modifier
){
    Text(text = stringResource(id = dayRes),
        modifier = modifier
            .padding(top = 8.dp),
        style = MaterialTheme.typography.h1
    )
}

@Composable
fun TaskImage(
    @DrawableRes imageRes: Int,
    modifier: Modifier = Modifier
){
    Box(
        modifier = modifier
            .fillMaxWidth()
            .padding(8.dp)
            .clip(
                RoundedCornerShape(
                    4
                )
            )
    ) {
        Image(
            modifier = Modifier
                .fillMaxWidth(),
            painter = painterResource(id = imageRes),
            contentDescription = null,
            contentScale = ContentScale.FillWidth
        )
    }
}

@Composable
fun TaskTitle(
    @StringRes titleRes:Int,
){
    Text(
        text = stringResource(id = titleRes),
        style = MaterialTheme.typography.h2
    )
}

@Composable
private fun DescriptionIcon(
    expanded: Boolean,
    onClick: () -> Unit,
    modifier: Modifier = Modifier
){
    IconButton(onClick = { onClick }) {
        Icon(imageVector = if (expanded)Icons.Filled.ExpandLess else Icons.Filled.ExpandMore,
            tint = MaterialTheme.colors.secondary,
            contentDescription = null
        )
    }
}

@Preview(showBackground = true, showSystemUi = true)
@Composable
fun ThirtyDaysOfTasksAppPreview(){
    ThirtyDayOfTasksTheme(darkTheme = false) {
        ThirtyDayOfTasksApp()
    }
}

@Preview(showSystemUi = true, showBackground = true)
@Composable
fun ThirtyDaysOfSuccessAppPreviewDark(){
    ThirtyDayOfTasksTheme(darkTheme = true) {
        ThirtyDayOfTasksApp()
    }
}

帮帮我
我尝试了不同的方法来解决这个问题,但没有,我认为问题在TaskDescription函数中

myzjeezk

myzjeezk1#

问题在这一行:IconButton(onClick = { onClick })-你为IconButton创建了onClick lambda,但是在里面你没有调用来自方法参数的另一个lambda,所以要使它工作,你可以做以下事情之一:
1.从方法的参数中添加lambda调用,如下所示:IconButton(onClick = { onClick() })IconButton(onClick = { onClick.invoke() })
1.只需将lambda从方法的参数传递给IconButton onClick参数,如下所示:IconButton(onClick = onClick)

相关问题