Android购物车功能的ViewModel
创始人
2024-10-08 01:31:24
0

以下是一个简单的Android购物车功能的ViewModel示例代码:

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel

class ShoppingCartViewModel : ViewModel() {
    private val _cartItems = MutableLiveData>()
    val cartItems: LiveData> get() = _cartItems

    private val _totalPrice = MutableLiveData()
    val totalPrice: LiveData get() = _totalPrice

    init {
        _cartItems.value = emptyList()
        _totalPrice.value = 0.0
    }

    fun addToCart(item: Item) {
        val currentCartItems = _cartItems.value.orEmpty().toMutableList()
        val existingCartItem = currentCartItems.find { it.item == item }

        if (existingCartItem != null) {
            existingCartItem.quantity++
        } else {
            currentCartItems.add(CartItem(item, 1))
        }

        _cartItems.value = currentCartItems
        calculateTotalPrice()
    }

    fun removeFromCart(item: Item) {
        val currentCartItems = _cartItems.value.orEmpty().toMutableList()
        val existingCartItem = currentCartItems.find { it.item == item }

        if (existingCartItem != null) {
            if (existingCartItem.quantity > 1) {
                existingCartItem.quantity--
            } else {
                currentCartItems.remove(existingCartItem)
            }

            _cartItems.value = currentCartItems
            calculateTotalPrice()
        }
    }

    private fun calculateTotalPrice() {
        val currentCartItems = _cartItems.value.orEmpty()
        var total = 0.0

        for (cartItem in currentCartItems) {
            total += cartItem.item.price * cartItem.quantity
        }

        _totalPrice.value = total
    }
}

data class Item(val name: String, val price: Double)
data class CartItem(val item: Item, var quantity: Int)

在上面的代码中,ShoppingCartViewModel是一个继承自ViewModel的类,用于管理购物车功能的数据和逻辑。它包含了以下几个属性和方法:

  • cartItems是一个LiveData对象,用于观察购物车中的物品列表。
  • totalPrice是一个LiveData对象,用于观察购物车中物品的总价。
  • addToCart()方法用于将物品添加到购物车中。
  • removeFromCart()方法用于从购物车中移除物品。
  • calculateTotalPrice()方法用于计算购物车中物品的总价。

在ViewModel中使用LiveData来存储购物车中的物品列表和总价,可以确保这些数据的变化能够被观察到,并且可以在界面中及时更新。通过调用addToCart()removeFromCart()方法来操作购物车中的物品,并根据操作结果来更新购物车列表和总价。

这只是一个简单的示例代码,实际的购物车功能可能还会有其他需求,例如清空购物车、调整物品数量等。你可以根据具体需求来扩展和修改这个ViewModel类。

相关内容

热门资讯

透视插件!wepoker可以设... 透视插件!wepoker可以设置盖牌-关于开挂透视辅助教程(有挂教学)透视插件!wepoker可以设...
最新技巧“浙江游戏大厅修改器”... 最新技巧“浙江游戏大厅修改器”原先有开挂辅助挂(确实有挂);1、这是跨平台的浙江游戏大厅修改器黑科技...
透视挂透视!hhpoker可以... 透视挂透视!hhpoker可以开挂-揭露开挂透视辅助攻略(有挂攻略)1、hhpoker可以开挂系统规...
玩家必看分享“小程序微乐游戏辅... 玩家必看分享“小程序微乐游戏辅助器”其实有开挂辅助器(详细教程);1、让任何用户在无需AI插件第三方...
透视工具!wepoker国外版... 透视工具!wepoker国外版透视-教你开挂透视辅助工具(了解有挂)1、全新机制【wepoker国外...
专业讨论“欢乐游戏城破解版内置... 专业讨论“欢乐游戏城破解版内置修改器”本来有开挂辅助脚本(了解有挂);详细欢乐游戏城破解版内置修改器...
一分钟教你“宝宝游戏辅助”好像... 您好:宝宝游戏辅助这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别...
透视最新!hhpoker透视挂... 透视最新!hhpoker透视挂实战视频-解谜开挂透视辅助攻略(有挂技术)1、超多福利:超高返利,海量...
9分钟了解“四川家园游戏辅助器... 9分钟了解“四川家园游戏辅助器平台交易”果然有开挂辅助下载(有挂规律);亲真的是有正版授权,小编(透...
透视科技!wepoker智能辅... 透视科技!wepoker智能辅助插件-教你开挂透视辅助插件(有挂方针)1、进入到wepoker智能辅...