大佬们 我刚开始学习compose 写了一个列表 但是滑动的时候会特别卡 求帮助
data class Message(val author: String, val body: String)@Preview@Composablefun MyList() { val context = LocalContext.current val msgList = (1..20).map { Message("Jetpack Compose", "$it") } MessageList(list = msgList) { position, message -> Toast.makeText(context, "message ${message.body} position $position", Toast.LENGTH_SHORT).show() }}@Composablefun MessageList(list: List<Message>, onItemClick: ((Int, Message) -> Unit)?) { LazyColumn { item { Text( text = "————Start————", modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center ) } itemsIndexed(list) { index: Int, item: Message -> key(item.body) { MessageCard(message = item) { onItemClick?.invoke(index, item) } } } item { Text( text = "————End————", modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center ) } }}@Composablefun MessageCard(message: Message, onClick: (() -> Unit)?) { val roundedCornerShape = RoundedCornerShape(10.dp) Surface( shape = MaterialTheme.shapes.medium, // 使用 MaterialTheme 自带的形状 color = MaterialTheme.colorScheme.background, modifier = Modifier .padding(all = 8.dp) .clickable { onClick?.invoke() } ) { Row( modifier = Modifier .padding(8.dp) .fillMaxWidth() ) { Box(modifier = Modifier.align(Alignment.CenterVertically)) { Image( painter = painterResource(id = R.drawable.ic_launcher_background), contentDescription = "这是图片", modifier = Modifier .size(50.dp) .clip(roundedCornerShape) .border(1.5.dp, MaterialTheme.colorScheme.secondary, roundedCornerShape) ) Image( painter = painterResource(id = R.drawable.ic_launcher_foreground), contentDescription = "这是图片", modifier = Modifier .size(50.dp) .clip(roundedCornerShape) ) } Spacer(modifier = Modifier.padding(start = 8.dp)) Column( modifier = Modifier.height(50.dp), verticalArrangement = Arrangement.SpaceBetween ) { Text( text = "作者是 ${message.author}", color = MaterialTheme.colorScheme.tertiary, style = MaterialTheme.typography.titleMedium, ) Text( text = "主题是 ${message.body}", style = MaterialTheme.typography.bodyLarge ) } } }}
我试着更新了依赖库依然没有变化
def composeBom = platform('androidx.compose:compose-bom:2024.05.00')api composeBomandroidTestImplementation composeBom//compose bomapi 'androidx.compose.foundation:foundation'api 'androidx.compose.material:material-icons-core'api 'androidx.compose.material:material-icons-extended'api "androidx.compose.material:material"api "androidx.compose.ui:ui-tooling-preview"api 'androidx.activity:activity-compose'api 'androidx.compose.material3:material3'api 'androidx.lifecycle:lifecycle-viewmodel-compose'api "androidx.compose.runtime:runtime-livedata"
你的LazyColumn
列表滑动卡顿可能由几个不同的原因造成。以下是一些可能的解决方案和检查点:
优化图片加载:
painterResource
加载的图片很大或者未经优化,它可能会导致性能问题。确保图片大小合适,并且已经进行了适当的压缩。减少重绘和布局计算:
使用正确的key
:
LazyColumn
的itemsIndexed
中,你使用了item.body
作为key
。如果body
内容经常变化或不是唯一的,这可能会导致性能问题。确保key
是唯一的,并且不会频繁变化。避免在列表项中创建新的对象:
MessageCard
中,每次渲染列表项时都创建新的RoundedCornerShape
和Modifier
对象。这可能会导致不必要的性能开销。尝试将这些对象定义为可复用的常量或成员变量。使用remember
缓存数据:
remember
来缓存这些数据或计算结果。减少onClick
回调的嵌套:
MessageCard
中,你使用了onClick
回调来调用另一个onItemClick
回调。虽然这不一定导致性能问题,但保持代码简洁和直接总是好的做法。使用Profiler工具分析性能:
更新Compose版本:
请注意,以上只是一些通用的建议。要准确地确定问题的根源,你可能需要更深入地分析你的代码和应用的性能。使用Profiler工具来监控CPU和GPU的使用情况,以及布局和绘制的性能,可以帮助你找到具体的瓶颈所在。
首先,我已经关闭了所有的动画设置: 窗口动画比例 过渡动画比例 动画师持续时间刻度 最近,我需要为一个旧的Android项目(5年以上)添加Espresso测试用例,我没有足够的时间来挖掘所有的自定义视图。 浓缩咖啡盒: 然后它启动了应用程序,我确实看到了活动中的所有元素,但浓缩咖啡无限等待。
本文向大家介绍Android实现读取NFC卡卡号示例,包括了Android实现读取NFC卡卡号示例的使用技巧和注意事项,需要的朋友参考一下 Android实现读取NFC卡卡号示例,具体如下: 1.权限 2.注册(静态) 3.Activity 初始化 启动 获取数据 解析 4.完整参考 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
我开发了一个系统,可以使用带有PN532芯片的阅读器读取NFC标签。它工作正常。我可以阅读米费尔经典和米费尔超轻标签。 现在我想使用带有Android 4.4.2的Nexus平板电脑来模拟标签。我没有Android开发经验,但我认为这是可能的。 我已经在Nexus平板电脑中设置了NFC通信,但我想我必须下载或编写一些应用程序来模拟Tag和NDEF通信。 最简单的方法是什么?
我下载了android Studio2.2.3并加载了我的项目。但Gradle构建运行卡住了。它不断显示,我不能运行我的应用程序。有什么问题,有谁能帮我吗?
这似乎是一个具有挑战性的动画,但我有一种感觉,这可以很容易地完成。我正在尝试实现如下所示的片段之间的动画(请参阅第二和第三象限) 进入和退出并不难,但是预显示下一张和上一张卡片的屏幕以及无缝切换到下一张卡片超出了我的知识范围。如果有人制作过类似的动画,请给我一些指点。 编辑 Android的官方文档在点击时过渡,即当用户点击页面缩小以显示最后一页和上一页时,滑动将其移动到下一页。我的要求是将页面保
我已经开始从事一个android项目,该项目有很多梯度任务。从git克隆项目后,Android Studio中没有gradle选项卡!