如何从适配器Kotlin增加通知徽章的计数器

阿妮克特·波特(Aniket Bote)

我正在尝试构建具有基本功能的电子商务应用程序。我希望购物车中的物品数量能反映在操作栏上。目前,我的用户界面如下所示。
用户界面

为了创建通知,这是我要做的:
cart_layout.xml:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="55sp"
        android:paddingRight="10sp"
        android:gravity="center">

    <ImageView
        android:id="@+id/cart_img"
        android:layout_width="30sp"
        android:layout_height="30sp"
        android:background="@drawable/shopping"
        android:foreground="?attr/selectableItemBackgroundBorderless" />

    <TextView
        android:id="@+id/item_count"
        android:layout_width="18sp"
        android:textAlignment="center"
        android:layout_height="18sp"
        android:textColor="@android:color/white"
        android:text="0"
        android:textSize="12sp"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="21dp"
        android:layout_marginTop="5dp"
        android:background="@drawable/itemcount" />

    </RelativeLayout>

</RelativeLayout>

在菜单目录中的cart_menu.xml如下所示:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/select_cart"
        app:showAsAction="always"
        app:actionLayout="@layout/cart_layout"
        android:title="Cart"/>

    <item android:id="@+id/toolbar_search"
        android:title="Search"
        android:icon="@drawable/ic_search_black_24dp"
        app:showAsAction ="always"
        app:actionViewClass="android.widget.SearchView"/>

</menu>

在Activity中的onCreateOptionsMenu函数如下所示:

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.cart_menu, menu)
        val count:View = menu!!.findItem(R.id.select_cart).actionView
        val itemText:TextView = count.findViewById(R.id.item_count)
        if(cartList.size == 0){
            itemText.visibility = View.INVISIBLE
        }
        if(cartList.size > 0) {
            itemText.visibility = View.VISIBLE
            itemText.text = cartList.size.toString()
        }
        return true
    }

这里cartList是购物车中物品的MutableList。

我想做的是每当用户单击“添加到购物车”按钮时,更新此购物车的计数器Adapter类中提供了此按钮的单击侦听器。ProductAdapter.kt内的onBindViewHolder内的onclicklistener看起来像这样:

holder.addToCart.setOnClickListener {
            holder.count.number = 1.toString()
            Log.d("Product","Clicked ${product.name}, count = ${holder.count.number}")
            val cartItemObj = CartItem(product.name,product.imageUrl, product.size, product.price, holder.count.number)
            val db = CartDatabase(context)
            val result = db.insertData(cartItemObj)
            if(result == (-1).toLong()){
                Log.d("ProductAdapter","Error in Inserting values")
                return@setOnClickListener
            }
            holder.addToCart.visibility = View.INVISIBLE
            holder.count.visibility = View.VISIBLE
            cartList.add(cartItemObj)

            // SOME CODE HERE TO UPDATE THE NUMBER OF ITEMS IN CART


        }

由于无法访问适配器内的Textview,因此我不知道应该如何实现。完整项目的链接是:这里

彼得

定义购物车数量

 var cartCounter: Int? = 0
 //private lateinit var itemText: TextView
 lateinit var itemText: TextView

然后在onCreateOptionsMenu方法中更新

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.cart_menu, menu)
        val count:View = menu!!.findItem(R.id.select_cart).actionView
        itemText:TextView = count.findViewById(R.id.item_count)
        if(cartList.size == 0){
            itemText.visibility = View.INVISIBLE
        }
        if(cartList.size > 0) {
            cartCounter = cartList.size;
            itemText.visibility = View.VISIBLE
            itemText.text = cartCounter.toString()
        }
        return true
    }

最后,当用户单击添加到购物车时,再次对其进行更新

holder.addToCart.setOnClickListener {
        holder.count.number = 1.toString()

        val cartItemObj = CartItem(product.name,product.imageUrl, product.size, product.price, holder.count.number)
        val db = CartDatabase(context)
        val result = db.insertData(cartItemObj)
        if(result == (-1).toLong()){
            Log.d("ProductAdapter","Error in Inserting values")
            return@setOnClickListener
        }
        holder.addToCart.visibility = View.INVISIBLE
        holder.count.visibility = View.VISIBLE
        cartList.add(cartItemObj)
        cartCounter = cartCounter + 1;
        // or cartCounter = cartCounter + quantity_of_item;

        itemText.text = cartCounter.toString()


    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章