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

相关内容

热门资讯

透视好友!aapoker辅助器... 透视好友!aapoker辅助器是真的吗,浙江游戏温州熟客辅助,攻略教程(有挂辅助);玩家必备必赢加哟...
最新技巧!微扑克智能ai辅助,... 最新技巧!微扑克智能ai辅助,德州ai辅助软件,详细教程(总是存在有挂);最新技巧!微扑克智能ai辅...
透视工具!wpk辅助软件,川娱... 透视工具!wpk辅助软件,川娱竞技有挂透视脚本,wpk教程(有挂技巧);支持2-10人实时对战,虚拟...
推荐十款!轰趴大菠萝怎么提高胜... 推荐十款!轰趴大菠萝怎么提高胜率,wpk透明挂,总结教程(最初真的是有挂);致您一封信;亲爱wpk透...
透视好友!aapoker透视软... 透视好友!aapoker透视软件,皮皮跑胡子修改器,教你攻略(有挂攻略);皮皮跑胡子修改器软件透明挂...
记者爆料!微扑克后台能控制胜率... 记者爆料!微扑克后台能控制胜率吗,aapoker挂,细节方法(原先是有挂);小薇(透视辅助)致您一封...
透视游戏!aapoker透视插... 透视游戏!aapoker透视插件下载,欢乐对决辅助菜单,实用技巧(有挂软件)1、点击下载安装,微扑克...
一分钟了解!wpk德州透视辅助... 您好,wpk德州透视辅助这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家...
透视透视挂!德普之星辅助功能如... 透视透视挂!德普之星辅助功能如何设置,福建天天开心辅助器,透明挂教程(有挂技巧),支持语音通讯、好友...
科普常识!aapoker透视辅... 科普常识!aapoker透视辅助,智星德州菠萝辅助器,wpk教程(竟然真的是有挂)1)智星德州菠萝辅...