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

相关内容

热门资讯

揭幕透视!pokemmo内置修... 揭幕透视!pokemmo内置修改器!确实真的是有辅助工具(详细教程)-哔哩哔哩1、进入到pokemm...
分享透视!epoker有透视吗... 分享透视!epoker有透视吗!都是有辅助工具(的确有挂)-哔哩哔哩epoker有透视吗是不是有人用...
解谜透视!红龙poker辅助器... 解谜透视!红龙poker辅助器免费观看!竟然真的有辅助教程(有挂猫腻)-哔哩哔哩1、完成红龙poke...
详细透视!德州圈脚本!总是是有... 详细透视!德州圈脚本!总是是有辅助app(真实有挂)-哔哩哔哩1、金币登录送、破产送、升级送、活动送...
有挂透视!德州局脚本!一贯一直... 有挂透视!德州局脚本!一贯一直总是有辅助教程(存在有挂)-哔哩哔哩德州局脚本能透视中分为三种模型:德...
关于透视!pokemmo脚本最... 您好,pokemmo脚本最新版这款游戏可以开挂的,确实是有挂的,需要了解加去威信【485275054...
有挂透视!哈糖大菠萝破解器!一... 有挂透视!哈糖大菠萝破解器!一贯一直都是有辅助神器(有挂教学)-哔哩哔哩1、哈糖大菠萝破解器破解器简...
了解透视!拱趴大菠萝挂哪里!果... 了解透视!拱趴大菠萝挂哪里!果然一直都是有辅助攻略(有挂细节)-哔哩哔哩1、很好的工具软件,可以解锁...
必备透视!扑克之星辅助!切实是... 必备透视!扑克之星辅助!切实是有辅助软件(有挂解惑)-哔哩哔哩一、扑克之星辅助游戏安装教程牌型概率发...
必备透视!sohoo竞技联盟辅... 必备透视!sohoo竞技联盟辅助器!总是是有辅助攻略(存在有挂)-哔哩哔哩1)sohoo竞技联盟辅助...