我读过类似的主题,但找不到满意的结果:
我的用例是:创建一个评论列表(数百个项目),并可以显示对每个评论的回复(每个项目数百个项目)。
目前不可能LazyColumn在另一个内部进行嵌套LazyColumn,因为 Compose 会抛出异常:
java.lang.IllegalStateException:垂直可滚动组件是用无限最大高度约束测量的,这是不允许的。常见原因之一是嵌套布局,例如 LazyColumn 和 Column(Modifier.verticalScroll())。如果您想在项目列表之前添加标题,请在 LazyColumn 范围内的主 items() 之前添加一个标题作为单独的 item() 。发生这种情况可能还有其他原因:您的 ComposeView 被添加到具有一定权重的 LinearLayout 中、您应用了 Modifier.wrapContentSize(unbounded = true) 或编写了自定义布局。请尝试消除滚动容器上方层次结构中无限约束的来源。
上面的链接(以及我想到的其他链接)提供的解决方案是:
LazyColumn- 我无法使用它,因为每个项目可以有不同的高度(例如:单行注释与多行注释)。Columns (不是惰性)LazyColumn- 性能方面它不如惰性,当使用 Android Studio 的 Profiler 和 500 个元素的列表时,正常Column会在我的应用程序中使用 350MB 的 RAM,而使用惰性 则需要 220-240MB Composables。因此它无法正常回收。FlowColumn伴奏者 - 我没有看到这个和正常之间有任何性能差异,Column所以请参见上面。android kotlin android-recyclerview android-jetpack-compose android-jetpack-compose-list
我想将一列中的每个项目逐一对齐。Column我相信简单地使用align这样的运算符是可能的:
Column {
Text(text = "First", modifier = Modifier.align(Alignment.Start))
Text(text = "Second", modifier = Modifier.align(Alignment.End))
Text(text = "Third", modifier = Modifier.align(Alignment.Start))
}
Run Code Online (Sandbox Code Playgroud)
但是我找不到适当范围内的align运算符LazyColumn。如何做到这一点LazyColumn?我不感兴趣,horizontalAlignment因为它适用于所有项目。
我有一个Row布局,里面有两个可组合项:
Text当内容很长时,它应该包裹自己的宽度并占用尽可能多的空间Image每次都必须出现在右侧Text为了实现这两个目标,我目前正在使用weight(weight = 1f, fill = false)Composable Text。它对于单行内容效果很好。但是,它会产生换行和换行多行文本的问题。为了看得更清楚,我添加了background(Color.Yellow)一些长话。参见参考代码:
Row {
Text(
text = "This is the message with quite super-unprecedented words",
modifier = Modifier
.background(Color.Yellow)
.weight(
weight = 1f,
fill = false
)
)
Image(
painter = painterResource(R.drawable.image),
contentDescription = null
)
}
Run Code Online (Sandbox Code Playgroud)
是否可以删除末尾的填充,Text以便也Image可以紧密贴合Text多行情况?或者有其他想法如何实现这一目标?我已经查看了softWrapforText和requireSizefor的参数Image,但运气不佳。
我读过类似的主题,但找不到正确的答案:
在我的Repository班级我感冒了Flow,我想分享给 2 Presenters/ViewModels所以我的选择是使用shareIn运算符。
让我们看一下 Android 文档的示例:
val latestNews: Flow<List<ArticleHeadline>> = flow {
...
}.shareIn(
externalScope, // e.g. CoroutineScope(Dispatchers.IO)?
replay = 1,
started = SharingStarted.WhileSubscribed()
)
Run Code Online (Sandbox Code Playgroud)
什么文档建议externalScope参数:
用于共享流的 CoroutineScope。这个范围应该比任何消费者活得更久,以根据需要保持共享流的活动。
但是,寻找有关如何停止订阅 aFlow的答案,第二个链接中投票最多的答案说:
解决方案不是取消流程,而是取消流程的范围。
对我来说,这些答案在SharedFlow的情况下是矛盾的。不幸的是,即使在调用它之后,我的Presenter/ViewModel仍然会收到最新的数据onCleared。
如何防止?这是我如何Flow在我的Presenter/ 中使用它的示例ViewModel …
android kotlin kotlin-coroutines kotlin-flow kotlin-coroutines-flow
我正在开发一个使用附近连接 API 和基本 P2P 策略的应用程序。突然间,很奇怪的是,我无法在我的 Pixel 3a 上宣传和发现配备最新 Android 12 和 Play 服务的设备。OnFailureListeners抛出这些异常:
8037: unknown status code: 80378038: unknown status code: 8038事实上,它们在文档和源代码中找不到。我还检查了谷歌的“剪刀石头布”官方示例,它抛出了相同的错误代码。
当然,我重新安装了应用程序并重新启动并更新了我的手机。编辑:我也恢复了出厂设置,但没有帮助。但当我使用 Android Flash Tool 降级到最新的 Android 11 后,它又开始工作了。此外,使用不同的手机在 Android 11、10 和 9 上一切仍然运行良好。
有什么想法导致这个问题吗?过去两周一直运行良好,今天停止运行。我相信它需要对源代码进行一些深入的调查(Xlythe,如果我可以寻求你的帮助,那就太好了)。
android google-play-services google-nearby google-nearby-connections