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辅助工具,教程书教程(真的有挂)-哔哩哔哩...
透视美元局!德普之星怎么设置埋... 透视美元局!德普之星怎么设置埋牌,德普之星辅助软件(透视)真是真的有挂(有挂详细)-哔哩哔哩1、德普...
今年以来!hhpoker德州牛... 今年以来!hhpoker德州牛仔视频,wepoker免费辅助器,妙招教程(证实有挂)-哔哩哔哩1、用...
透视插件!德扑圈透视,德普之星... 透视插件!德扑圈透视,德普之星辅助工具如何打开(透视)原来是真的挂(有挂分析)-哔哩哔哩1、该软件可...
一直以来!wepoker辅助软... 一直以来!wepoker辅助软件视频,微信小程序游戏破解微乐游戏,大纲教程(新版有挂)-哔哩哔哩1、...
透视科技!德普之星透视辅助软件... 透视科技!德普之星透视辅助软件激活码,德普之星透视软件免费入口官网(透视)果然真的是有挂(有挂分享)...
现有关情况通报如下!广东雀神智... 现有关情况通报如下!广东雀神智能插件安装测试,广东雀神挂件怎么样,法门教程(有挂技巧)-哔哩哔哩1、...
透视软件!如何下载德普之星辅助... 透视软件!如何下载德普之星辅助软件,德普之星怎么开辅助(透视)果然是真的挂(有挂助手)-哔哩哔哩1、...
更值得关注的是!海南琼崖海南辅... 更值得关注的是!海南琼崖海南辅助功能,雀友软件脚本辅助器,手段教程(有挂分享)-哔哩哔哩亲,关键说明...
透视ai代打!德普之星私人局辅... 透视ai代打!德普之星私人局辅助器,德普之星辅助工具如何打开(透视)本来存在有挂(有挂详情)-哔哩哔...