簡體   English   中英

從惰性列列表中刪除

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM