- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在尝试为我的论文编写一个应用程序,目前,我正在研究不同的方法。因为我真的很喜欢 Flutter 并且论文要求我使用 Java/Kotlin,所以我想使用 Jetpack compose。
目前,我一直在尝试更新 ListElements。
我想要一个显示实验及其状态/结果的列表。一旦我点击按钮,我希望实验运行并在它们完成后更新它们的状态。目前, run 方法除了将状态设置为成功之外什么都不做。
问题是一旦实验更新其状态,我不知道如何从 ExperimentRow 的 viewModel 触发重组。
实验 Activity :
class ExperimentsActivity : AppCompatActivity() {
val exViewModel by viewModels<ExperimentViewModel>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//For now this is just Dummy Data and will be replaced
exViewModel.experiments += listOf(
Experiment("Test1", exViewModel::experimentStateChanged),
Experiment("Strongbox", exViewModel::experimentStateChanged)
)
setContent {
TpmTheme {
// A surface container using the 'background' color from the theme
Surface {
ExperimentScreen(
exViewModel.experiments,
exViewModel::startTests
)
}
}
}
}
}
class ExperimentViewModel : ViewModel() {
var experiments by mutableStateOf(listOf<Experiment>())
fun startTests() {
for (exp in experiments) {
exp.run()
}
}
fun experimentStateChanged(experiment: Experiment) {
Log.i("ViewModel", "Changed expState of ${experiment.name} to ${experiment.state}")
// HOW DO I TRIGGER A RECOMPOSE OF THE EXPERIMENTROW FOR THE experiment????
//experiments = experiments.toMutableList().also { it.plus(experiment) }
Log.i("Vi", "Size of Expirments: ${experiments.size}")
}
}
实验画面:
@Composable
fun ExperimentScreen(
experiments: List<Experiment>,
onStartExperiments: () -> Unit
) {
Column {
LazyColumnFor(
items = experiments,
modifier = Modifier.weight(1f),
contentPadding = PaddingValues(top = 8.dp),
) { ep ->
ExperimentRow(
experiment = ep,
modifier = Modifier.fillParentMaxWidth(),
)
}
Button(
onClick = { onStartExperiments() },
modifier = Modifier.padding(16.dp).fillMaxWidth(),
) {
Text("Run Tests")
}
}
}
@Composable
fun ExperimentRow(experiment: Experiment, modifier: Modifier = Modifier) {
Row(
modifier = modifier
.padding(horizontal = 16.dp, vertical = 8.dp),
horizontalArrangement = Arrangement.SpaceBetween
) {
Text(experiment.name)
Icon(
asset = experiment.state.vAsset,
)
}
实验:
class Experiment(val name: String, val onStateChanged: (Experiment) -> Unit) {
var state: ExperimentState = ExperimentState.DEFAULT
set(value) {
field = value
onStateChanged(this)
}
fun run() {
state = ExperimentState.SUCCESS;
}
}
enum class ExperimentState(val vAsset: VectorAsset) {
DEFAULT(Icons.Default.Info),
RUNNING(Icons.Default.Refresh),
SUCCESS(Icons.Default.Done),
FAILED(Icons.Default.Warning),
}
最佳答案
有几种方法可以解决这个问题,但关键是您需要将元素的副本(状态已更改)添加到 experiments
触发重组。
一个可能的例子是
data class Experiment(val name: String, val state: ExperimentState, val onStateChanged: (Experiment) -> Unit) {
fun run() {
onStateChanged(this.copy(state = ExperimentState.SUCCESS))
}
}
接着
fun experimentStateChanged(experiment: Experiment) {
val index = experiments.toMutableList().indexOfFirst { it.name == experiment.name }
experiments = experiments.toMutableList().also {
it[index] = experiment
}
}
尽管我怀疑这样做可能有更清洁的方法。
关于android - Jetpack 撰写更新列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64966042/
我对这个框架完全陌生。浏览所有文档后,我已经使用 visual studio 和类型脚本成功配置了 Aurelia 框架。我想知道如何在另一个 View 中组合一个 View ,并从其父 View 初
我有一个包含Nginx,php,redis和专用于SSH隧道的容器的Docker Compose文件。 我的Mac上有一个ssh配置文件,该文件可以在运行ssh my-tunnel时按预期工作,并且通
当我运行 docker-compose up 时,我得到这个错误: root@ubuntu:/home/benson/Docker/HaproxyMy# docker-compose up Recre
我有一个对话框,当我按下按钮时我无法关闭这是我的代码,我相信这是用于 if 循环的,但在那种情况下我需要它来实现它,有什么想法可以帮助我吗? @Composable fun PopupWind
我想在 Jetpack Compose 中创建曲线文本,就像在“Material You”中一样。但是怎么办?例子: 最佳答案 您可以使用 Canvas 来做到这一点。 Compose 本身没有绘制弯
我想选择我的 LazyColumn 中的一项并更改文本颜色。 如何识别选择了哪个项目? 代码: val items = listOf(Pair("A", 1), Pair("AA", 144), Pa
我很难确定我的问题是 Jetpack Compose 缺少功能还是我找不到它是如何完成的。 假设我想做这个页面 它需要可滚动,因为内容很长。 我还想使用惰性列来加载图像中显示的用户列表。 问题是您不能
我正在尝试在节点应用程序的 docker 容器内运行 webpack。我收到以下错误。 sh: 1: webpack: Permission denied Dockerfile 在正常构建上运行良好。
我有一个 React 应用程序,它也使用 Recompose和Redux . 它们都有一个内容非常相似的 compose 函数: Compose from Redux Compose from Rec
docker -ps -a CONTAINER ID IMAGE COMMAND CREATED S
在 javascript 世界中,这两种模式有什么区别吗? a(b)(c)(f) a(b(c(f))) 它们在功能上是相同的,并且都增加了调用堆栈的长度。 似乎组合模式(#1)更受欢迎,想知道我们有什
我怎样才能实现以下外观,其中有一个标题,然后是分隔线和一个用于输入正文的区域。看起来好像它几乎是一个 UITextView 最佳答案 很简单,他们使用两个字段。第一个是 UITextfield,允许您
我正在尝试查看是否有任何方法可以从网站(html/javascript)调用/启动 Outlook 撰写。此外,它还需要使用模板。 例如:我单击网页上的按钮,它将启动 Outlook 撰写邮件窗口,并
我有一个带有嵌套 LazyRows 的 LazyColumn(类似于 Netflix 或 Spotify 主页提要)。简而言之,我遇到的问题是当页面内容更改时,嵌套 LazyRow 的滚动位置不会重置
我需要为整个应用程序设置背景颜色。在 xml 中,我们使用 android:background在 fragment 或 Activity 中标记。 Compose 有什么模拟功能? Surface
在我的 fragment 中使用 Compose 时出现此错误,在 XML 的情况下可以正常工作ViewTreeLifecycleOwner not found from androidx.fragm
我正在尝试测试 Text在我的组件上我可以用不同的颜色打印它,所以在我的测试中我正在验证它是否获得了预期的颜色。我正在寻找一种返回颜色的方法,但我没有找到任何方法。 从现在开始,我断言文本是正确的并且
我正在尝试使用 Slick 3.0 编写查询,但似乎无法弄清楚。 等效的 SQL 是“insert into SavedMail select * from Inbox where Inbox.id
我使用 docker-compose,我使用 env 文件和我的局部变量。 我需要传递数组变量。 我试过了: TAGS="12345","67890" 或者 TAGS=["12345","67890"
我想将python集成到dotnet核心镜像中,因为我需要执行python脚本。 当我执行此DockerFile时,会创建许多悬空图像。 Dangling Images 另外,有没有适当的方法来集成p
我是一名优秀的程序员,十分优秀!