[英]Removed From the lazy column list
每當我嘗試從惰性列列表中刪除時,我都會得到arrayIndexOutOfBoundException
This is the array that
var productsList = remember { mutableStateListOf<Product>() }//I load products in this list
每當用戶按下某個按鈕時,我都會執行以下操作
productsList.remove(item)
我得到數組arrayIndexOutOfBoundException
這也是我循環的方式
itemsIndexed(productsList) { index, item ->
無論如何要避免那個錯誤
感興趣的人的完整代碼:
fun MyProducts(navController: NavController,myProductsViewModel: MyProductsViewModel= viewModel()) {
var productsList = remember { mutableStateListOf<Product>() }
val scope = rememberCoroutineScope()
val listState = rememberLazyListState()
var currentImage = remember { mutableStateListOf<Int>() }
LaunchedEffect(key1 = Unit){
myProductsViewModel.getShop()
productsList.addAll(myProductsViewModel.productsList)
currentImage.addAll(List(productsList.size) {0})
}
var pickedImage: MutableState<String?> =remember { mutableStateOf("") }
BackHandler() {
navController.popBackStack()
}
LazyColumn(
Modifier
.fillMaxSize()
.padding(start = 16.dp),
horizontalAlignment = Alignment.Start,
verticalArrangement = Arrangement.spacedBy(8.dp)
,state = listState
) {
itemsIndexed(productsList) { index, item ->
.clickable {when(icon){
Icons.Default.Delete->{
scope.launch {
myProductsViewModel.removeProducts(item.product_id,item.shop_id,item)
productsList.remove(item)
}
}
Icons.Default.Edit->{
}
我正在訪問代碼 rest 中的相同列表,但我認為它與問題無關
您沒有提供正確的代碼示例,但聽起來您沒有正確更新列表和惰性列,因此該項目已從列表中刪除,但惰性列不知道它。
從我的角度來看,您的代碼通常有一些不好的做法。 例如:
LaunchedEffect(key1 = Unit){
myProductsViewModel.getShop()
productsList.addAll(myProductsViewModel.productsList)
currentImage.addAll(List(productsList.size) {0})
}
這一切看起來都像是應該在視圖模型中完成的事情。 通常,可組合項應該將 state 轉換為 UI,這意味着它不應包含任何業務邏輯。 我剛剛展示的代碼片段看起來像是可以在視圖模型中完成的事情。
有這樣的事情
var productsList = remember { mutableStateListOf<Product>() }
然后添加帶有 LaunchedEffect 的元素並不是可組合項的應有使用方式。
首先,您的myProductsViewModel.productsList
應該是一個 LiveData object,它包含您的產品列表。 那么你應該做以下事情:
val productList by myProductsViewModel.productsList.observeAsState(emptyList())
然后在可組合項中顯示它。 如果你想改變列表內容,你應該在視圖模型上調用一個方法,然后相應地更新列表的實時數據 object 。
我希望我解釋得足夠清楚。 如果您有任何疑問,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.