기본 기능을 갖춘 전자 상거래 앱을 구축하려고합니다. 카트에있는 항목 수가 작업 표시 줄에 반영되기를 원합니다. 현재 내 UI는 다음과 같습니다.
알림을 만들기 위해 이것이 내가 한 일입니다.
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 클래스 내에 있습니다. 내 OnClickListener를 내부 onBindViewHolder 내부 ProductAdapter.kt의 다음과 같다 :
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] 삭제
몇 마디 만하겠습니다