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类。

相关内容

热门资讯

黑科技辅助(wepoke调控参... 黑科技辅助(wepoke调控参数)外挂黑科技辅助方法(透视)总是真的是有挂(黑科技插件)1、wepo...
黑科技了解(微扑克有ai吗)外... 黑科技了解(微扑克有ai吗)外挂透视辅助教程(透视)果然真的有挂(黑科技细节)1、任何微扑克有ai吗...
黑科技有挂(wepoke透明挂... 黑科技有挂(wepoke透明挂要多少钱)外挂黑科技辅助下载(透视)原来是有挂(黑科技脚本)wepok...
黑科技科技(aa扑克德州辅助工... 黑科技科技(aa扑克德州辅助工具)外挂透视辅助app(透视)都是存在有挂(黑科技揭秘);1、aa扑克...
黑科技真的(德扑之星作弊事件)... 黑科技真的(德扑之星作弊事件)外挂黑科技辅助方法(透视)本来是有挂(黑科技方法)1、下载好德扑之星作...
黑科技好友房(aa扑克发牌机制... 黑科技好友房(aa扑克发牌机制)外挂透明挂辅助挂(透视)本来是有挂(黑科技插件);1、aa扑克发牌机...
黑科技安卓版(德扑之星辅牌软件... 黑科技安卓版(德扑之星辅牌软件)外挂黑科技辅助插件(透视)竟然真的是有挂(黑科技工具)1、构建自己的...
黑科技系统(aapoker有挂... 黑科技系统(aapoker有挂吗)外挂黑科技辅助软件(透视)一贯有挂(黑科技辅助)1、该软件可以轻松...
黑科技ai代打(aa poke... 黑科技ai代打(aa poker智能ai辅助价格)外挂黑科技辅助助手(透视)竟然是有挂(黑科技辅助)...
黑科技系统(微扑克辅助软件)外... 黑科技系统(微扑克辅助软件)外挂透视辅助软件(透视)切实是真的有挂(黑科技插件);1、很好的工具软件...