gpt4 book ai didi

android - 为什么我的可组合不会在更改 HashMap 的 MutableState 值时重新组合?

转载 作者:行者123 更新时间:2023-12-04 23:41:36 25 4
gpt4 key购买 nike

为什么我的可组合不会在更改 HashMap 的 MutableState 的值时重新组合。
View 模型

 val imageList: MutableState<HashMap<Int, Uri>> = mutableStateOf(HashMap())
fun setImage(imageUri: Uri) {
imageList.value[imagePosition] = imageUri
}
分段
if (viewModel.imageList.value[stepNo] != null && !TextUtils.isEmpty(
viewModel.imageList.value[stepNo].toString()
)
) {
Image(
contentDescription = "Recipe",
painter = painterResource(R.drawable.ic_baseline_fastfood_24),
modifier = Modifier
.padding(8.dp)
)
}

fun permissionCallbacks() {
imagePickerListener =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
// There are no request codes
val data: Intent? = result.data
val selectedImageUri = data?.data
selectedImageUri?.let { viewModel.setImage(it) }
}
}
requestPermissionLauncher =
registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { isGranted: Boolean ->
if (isGranted) {
val galleryIntent = Intent(
Intent.ACTION_PICK,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI
)
galleryIntent.type = "image/*"
imagePickerListener?.launch(galleryIntent)
} else {

}
}
}
我通过调试在 setImage() 中正确设置的值看到了方法但 if 条件为 viewModel.imageList.value[stepNo]当 hashmap 的值改变时不会再次调用。

最佳答案

mutableStateOf只能在您将一个值替换为另一个值时进行跟踪。如果您更改当前值的状态,它无法处理它
您可以使用 mutableStateMapOf而不是 mutableStateOf(HashMap()) :

val imageList = mutableStateMapOf<Int, Uri>()
---
fun setImage(imageUri: Uri) {
imageList[imagePosition] = imageUri
}

关于android - 为什么我的可组合不会在更改 HashMap 的 MutableState 值时重新组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68871551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com