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

相关内容

热门资讯

科普一下!同城游辅助工具,山西... 科普一下!同城游辅助工具,山西扣点点脚本辅助器,果然有挂(哔哩哔哩)1、山西扣点点脚本辅助器免费脚本...
有挂一下!广东雀神挂件定制,天... 有挂一下!广东雀神挂件定制,天天贵阳辅助工具,都是真的有挂(哔哩哔哩)1、任何天天贵阳辅助工具透视是...
必备一下!火神大厅科技,爱来大... 必备一下!火神大厅科技,爱来大菠萝怎么玩,都是是有挂(哔哩哔哩)1、在火神大厅科技插件功能辅助器技巧...
分享一下!奇迹陕西抢红包辅助器... 分享一下!奇迹陕西抢红包辅助器,微乐陕西三代自建房挂,一直存在有挂(哔哩哔哩)1、微乐陕西三代自建房...
专业一下!微信小程序微乐家乡辅... 专业一下!微信小程序微乐家乡辅助器,樱花之盛低价挂,真是真的有挂(哔哩哔哩)1、全新机制【微信小程序...
教你一下!抚州辅助器中至小程序... 教你一下!抚州辅助器中至小程序,微信微乐辅助,确实真的是有挂(哔哩哔哩)1、超多福利:超高返利,海量...
详情一下!山西扣点子的技巧,兴... 详情一下!山西扣点子的技巧,兴动互娱辅助工具,好像是真的有挂(哔哩哔哩)所有人都在同一条线上,像星星...
详细一下!蘑菇云游破解版,荔枝... 详细一下!蘑菇云游破解版,荔枝竞技通用辅助器,总是存在有挂(哔哩哔哩)1、玩家可以在蘑菇云游破解版透...
普及一下!小逸碰胡脚本,微信小... 普及一下!小逸碰胡脚本,微信小程序游戏破解微乐游戏,真是真的有挂(哔哩哔哩)1、微信小程序游戏破解微...
必备一下!奇迹陕西辅助器,约局... 必备一下!奇迹陕西辅助器,约局吧技巧,果然存在有挂(哔哩哔哩)1)奇迹陕西辅助器辅助插件:进一步探索...