![](/img/trans.png)
[英]Unwanted recomposition when using Context/Toast in event - Jetpack Compose
[英]Compose - DropDownMenu is causing unwanted recomposition
這是我的應用程序中的可組合層次結構:
HorizontalPager
↪LazyVerticalGrid
↪PostItem
↪AsyncImage
DropdownMenu
↪DropdownMenuItem
當滑動HorizontalPager
AsyncImage
時,我的 PostItem 中的 AsyncImage 正在重新組合。 刪除DropdownMenu
可以修復此問題,並且 PostItem 不再重新組合並提供所需的行為。
問題是我在瀏覽 Horizo HorizontalPager
時 FPS 大幅下降。 為什么在滑動HorizontalPager
ntalPager 時DropdownMenu
導致重組?
var showMenu by remember { mutableStateOf(false) }
DropdownMenu(
expanded = showMenu,
onDismissRequest = { showMenu = false }) {
DropdownMenuItem(onClick = {
}) {
Text(text = "Share")
}
}
不幸的是,沒有看到更多顯示結構 rest 的代碼,很難確定您的問題出在哪里。
一個可能的答案是您沒有充分拆分可組合項 function。 文檔幾乎沒有提到的是,許多內置可組合對象的content
部分是inline functions
,這意味着如果內容重構,父級也會重構。 這是我能給出的最簡單的例子。
@Composable
fun foo() {
println("recompose function")
Box {
println("recompose box")
Column {
println("recompose column")
Row {
println("recompose row")
var testState by mutableStateOf("my text")
Button(
onClick = { testState = "new text" }
) {}
Text(testState)
}
}
}
}
output 是:重組 function 重組框 重組列 重組行
這不僅重組了整個 function,它還重新創建了testState
,使其永遠不會更改值。
再次不是 100% 這是你的問題,但我會調查它。 解決方案是將我的Row
和行內容拆分到它自己的可組合項 function 中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.