0

Excuse me, I got an error updating textview tv_cart_realprice2 using item.hargaproduk data while in app inspection item.hargaproduk is updated. it cannot updated automatically, it need to move to another fragment than back to the fragment where the recyclerview belong. how to fix this? thank you here is the code :

class CartAdapter(
    private val listItems: ArrayList<Cart>,
    private val listener: OnAdapterListener
) : RecyclerView.Adapter<CartAdapter.CartViewHolder>()
{

    private lateinit var database: CartRoomDatabase
    private lateinit var dao: CartDao

    interface OnAdapterListener{
        fun onTambah(total: Int)
        fun onKurang(total: Int)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CartViewHolder {
        val view = ItemcartBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return CartViewHolder(view)
    }

    class CartViewHolder( binding:ItemcartBinding) : RecyclerView.ViewHolder(binding.root) {
        var tvNamaProduk = binding.tvNamaprodukfin
        var tvHargaProduk = binding.tvHargaprodukfin
        var tvStokProduk = binding.tvBanyakstok
        var tvGambarProduk = binding.ivCartitem
        var tvCartRealPrice = binding.tvCartRealprice
        var lnCartTambahProduk = binding.lnCartTambahproduk
        val llItemCartDeleteItem = binding.llItemcartDeleteitem
        val btnTambahProduk = binding.btnCartTambahproduk
        val ivTambahStok = binding.ivTambahstok
        val ivKurangStok = binding.ivKurangstok
        var tvCartRealPrice2 = binding.tvCartRealprice2
    }

    override fun getItemCount() = listItems.size

    @SuppressLint("NotifyDataSetChanged")
    private fun updatecart(cart: Cart) {
        dao.update(cart)
        notifyDataSetChanged()
    }

    @SuppressLint("NotifyDataSetChanged")
    override fun onBindViewHolder(holder: CartViewHolder, position: Int) {
        var sharedPreferences = holder.itemView.context.getSharedPreferences("sp_login", Context.MODE_PRIVATE)
        var idlogin = sharedPreferences.getString("login_id", null)
        var loginkey = sharedPreferences.getString("login_key", null)

        database = CartRoomDatabase.getDatabase(holder.itemView.context.applicationContext)
        dao = database.getCartDao()
        var item = listItems[position]
        var lastItems = listItems.last()
        holder.tvNamaProduk.text = item.namaproduk

        if (item == lastItems){
            holder.lnCartTambahProduk.visibility = View.VISIBLE
        } else {
            holder.lnCartTambahProduk.visibility = View.GONE
        }

        Glide.with(holder.tvGambarProduk)
            .load(item.gambarproduk)
            .error(R.drawable.bannerwelcome)
            .into(holder.tvGambarProduk)

        when(loginkey){
            "user" -> {
                holder.tvCartRealPrice2.visibility = View.GONE
                holder.tvStokProduk.text = item.stokproduk.toString()
                holder.tvCartRealPrice.text = item.hargastart.toString()
                holder.tvHargaProduk.text = item.totalperproduk.toString()
                val apiService = ApiService.getInstance().create(ApiEndpoint::class.java)
                apiService.getdataproduct(item.idproduk).enqueue(object : Callback<ProductResponse>{
                    override fun onResponse(call: Call<ProductResponse>, response: Response<ProductResponse>) {
                        val responsestok = response.body()!!.datadata[0].stok!!.toInt()
                        holder.ivTambahStok.setOnClickListener {
                            if (item.stokproduk < responsestok){
                                item.stokproduk++
                                holder.tvStokProduk.text = item.stokproduk.toString()
                                item.totalperproduk = item.stokproduk*item.hargastart
                                val getitemcart = holder.tvStokProduk.text.toString().toInt()
                                var data =
                                    Cart(no = item.no, noproduk = item.noproduk, idproduk = item.idproduk,
                                        namaproduk = item.namaproduk, hargaproduk = item.hargastart,
                                        hargastart = item.hargastart,
                                        gambarproduk = item.gambarproduk, jenisboronganproduk = "ecer",
                                        stokproduk = getitemcart, totalperproduk = item.totalperproduk, beratproduk = item.beratproduk)
                                updatecart(data)
                                holder.tvHargaProduk.text = item.totalperproduk.toString()
                                listener.onTambah(item.totalperproduk)
                            } else{
                                item.stokproduk = responsestok
                                holder.tvStokProduk.text = item.stokproduk.toString()
                                item.totalperproduk = item.stokproduk*item.hargastart
                                val getitemcart = holder.tvStokProduk.text.toString().toInt()
                                var data =
                                    Cart(no = item.no, noproduk = item.noproduk, idproduk = item.idproduk,
                                        namaproduk = item.namaproduk, hargaproduk = item.hargastart,
                                        hargastart = item.hargastart,
                                        gambarproduk = item.gambarproduk, jenisboronganproduk = "ecer",
                                        stokproduk = getitemcart, totalperproduk = item.totalperproduk, beratproduk = item.beratproduk)
                                updatecart(data)
                                holder.tvHargaProduk.text = item.totalperproduk.toString()
                                listener.onTambah(item.totalperproduk)
                            }
                        }
                        holder.ivKurangStok.setOnClickListener {
                            if (item.stokproduk > 0){
                                item.stokproduk--
                                holder.tvStokProduk.text = item.stokproduk.toString()
                                item.totalperproduk = item.stokproduk*item.hargastart
                                val getitemcart = holder.tvStokProduk.text.toString().toInt()
                                var data =
                                    Cart(no = item.no, noproduk = item.noproduk, idproduk = item.idproduk,
                                        namaproduk = item.namaproduk, hargaproduk = item.hargastart,
                                        hargastart = item.hargastart,
                                        gambarproduk = item.gambarproduk, jenisboronganproduk = "ecer",
                                        stokproduk = getitemcart, totalperproduk = item.totalperproduk, beratproduk = item.beratproduk
                                    )
                                updatecart(data)
                                holder.tvHargaProduk.text = item.totalperproduk.toString()
                                listener.onTambah(item.totalperproduk)
                            } else {
                                item.stokproduk = 0
                                holder.tvStokProduk.text = item.stokproduk.toString()
                                item.totalperproduk = item.stokproduk*item.hargastart
                                val getitemcart = holder.tvStokProduk.text.toString().toInt()
                                var data =
                                    Cart(no = item.no, noproduk = item.noproduk, idproduk = item.idproduk,
                                        namaproduk = item.namaproduk, hargaproduk = item.hargastart,
                                        hargastart = item.hargastart,
                                        gambarproduk = item.gambarproduk, jenisboronganproduk = "ecer",
                                        stokproduk = getitemcart, totalperproduk = item.totalperproduk, beratproduk = item.beratproduk)
                                updatecart(data)
                                holder.tvHargaProduk.text = item.totalperproduk.toString()
                                listener.onTambah(item.totalperproduk)
                            }
                        }
                    }

                    override fun onFailure(call: Call<ProductResponse>, t: Throwable) {
                        Toast.makeText(holder.itemView.context, "error $t", Toast.LENGTH_SHORT).show()
                    }

                })
            }
            "reseller" -> {
                    holder.tvStokProduk.text = item.stokproduk.toString()
                    holder.tvCartRealPrice.text = item.hargaproduk.toString()
                    holder.tvHargaProduk.text = item.totalperproduk.toString()
                    holder.tvCartRealPrice2.visibility = View.VISIBLE
                ///udah bener///
                val apiService = ApiService.getInstance().create(ApiEndpoint::class.java)
                apiService.getdataproduct(item.idproduk).enqueue(object : Callback<ProductResponse>{
                    override fun onResponse(call: Call<ProductResponse>, response: Response<ProductResponse>) {
                        val responsestok = response.body()!!.datadata[0].stok!!.toInt()

                        holder.ivTambahStok.setOnClickListener {
                            item.stokproduk+=5
                            val hargaPotonganPerItem = 1000
                            val potonganHarga = when {
                                item.stokproduk == 5 -> hargaPotonganPerItem
                                item.stokproduk >= 10 -> hargaPotonganPerItem * 2
                                else -> 0
                            }
                            if (responsestok in 0..4){
                                Toast.makeText(holder.itemView.context, "Maaf, stok produk sudah berada dibawah 5, silahkan pilih produk yang lain", Toast.LENGTH_SHORT).show()
                            }
                            else if(responsestok in 5..9){
                                var maxStockCanBuy = minOf(responsestok, item.stokproduk)
                                maxStockCanBuy -= item.stokproduk
                                holder.tvStokProduk.text = maxStockCanBuy.toString()

                                item.totalperproduk = item.stokproduk*(item.hargastart - potonganHarga)
                                val getitemcart = holder.tvStokProduk.text.toString().toInt()
                                var data =
                                    Cart(no = item.no, noproduk = item.noproduk, idproduk = item.idproduk,
                                        namaproduk = item.namaproduk, hargaproduk = item.hargastart - potonganHarga,
                                        hargastart = item.hargastart,
                                        gambarproduk = item.gambarproduk, jenisboronganproduk = "grosir",
                                        stokproduk = getitemcart, totalperproduk = item.totalperproduk, beratproduk = item.beratproduk)
                                updatecart(data)
                                listener.onTambah(item.totalperproduk)

                            }
                            else if (responsestok in 10..20){
                                var maxStockCanBuy = minOf(responsestok, item.stokproduk)
                                maxStockCanBuy -= item.stokproduk

                                holder.tvStokProduk.text = maxStockCanBuy.toString()
                                item.totalperproduk = item.stokproduk*(item.hargastart - potonganHarga)
                                val getitemcart = holder.tvStokProduk.text.toString().toInt()
                                var data =
                                    Cart(no = item.no, noproduk = item.noproduk, idproduk = item.idproduk,
                                        namaproduk = item.namaproduk, hargaproduk = item.hargastart - potonganHarga,
                                        hargastart = item.hargastart,
                                        gambarproduk = item.gambarproduk, jenisboronganproduk = "grosir",
                                        stokproduk = getitemcart, totalperproduk = item.totalperproduk, beratproduk = item.beratproduk)
                                updatecart(data)
                                listener.onTambah(item.totalperproduk)
                            } else {
                                if (item.stokproduk == 5){
                                    holder.tvStokProduk.text = item.stokproduk.toString()

                                    ///udah bener nih///
                                    item.totalperproduk = item.stokproduk*(item.hargastart - potonganHarga)
                                    val getitemcart = holder.tvStokProduk.text.toString().toInt()
                                    var data =
                                        Cart(no = item.no, noproduk = item.noproduk, idproduk = item.idproduk,
                                            namaproduk = item.namaproduk, hargaproduk = item.hargastart - potonganHarga,
                                            hargastart = item.hargastart,
                                            gambarproduk = item.gambarproduk, jenisboronganproduk = "grosir",
                                            stokproduk = getitemcart, totalperproduk = item.totalperproduk, beratproduk = item.beratproduk)
                                    updatecart(data)
                                    ///
                                    //holder.tvHargaProduk.text = item.totalperproduk.toString()
                                    Toast.makeText(holder.itemView.context, "${item.hargaproduk}", Toast.LENGTH_SHORT).show()
                                    listener.onTambah(item.totalperproduk)
                                } else if (item.stokproduk == 10  || item.stokproduk >= 10){
                                    holder.tvStokProduk.text = item.stokproduk.toString()

                                    item.totalperproduk = item.stokproduk*(item.hargastart - potonganHarga)
                                    val getitemcart = holder.tvStokProduk.text.toString().toInt()
                                    var data =
                                        Cart(no = item.no, noproduk = item.noproduk, idproduk = item.idproduk,
                                            namaproduk = item.namaproduk, hargaproduk = item.hargastart - potonganHarga,
                                            hargastart = item.hargastart,
                                            gambarproduk = item.gambarproduk, jenisboronganproduk = "grosir",
                                            stokproduk = getitemcart, totalperproduk = item.totalperproduk, beratproduk = item.beratproduk)
                                    updatecart(data)
                                    listener.onTambah(item.totalperproduk)
                                } else {
                                    Toast.makeText(holder.itemView.context, "jumlah item tidak valid", Toast.LENGTH_SHORT)
                                        .show()
                                }
                            }
                        }

                        holder.ivKurangStok.setOnClickListener {
                            item.stokproduk-=5
                            if (item.stokproduk > 0){
                                val hargaPotonganPerItem = 1000
                                val potonganHarga = when {
                                    item.stokproduk == 5 -> hargaPotonganPerItem
                                    item.stokproduk >= 10 -> hargaPotonganPerItem * 2
                                    else -> 0
                                }
                                if (item.stokproduk == 5){
                                    holder.tvStokProduk.text = item.stokproduk.toString()

                                    item.totalperproduk = item.stokproduk*(item.hargastart - potonganHarga)
                                    val getitemcart = holder.tvStokProduk.text.toString().toInt()
                                    var data =
                                        Cart(no = item.no, noproduk = item.noproduk, idproduk = item.idproduk,
                                            namaproduk = item.namaproduk, hargaproduk = item.hargastart - potonganHarga,
                                            hargastart = item.hargastart,
                                            gambarproduk = item.gambarproduk, jenisboronganproduk = "grosir",
                                            stokproduk = getitemcart, totalperproduk = item.totalperproduk, beratproduk = item.beratproduk)
                                    updatecart(data)
                                    Toast.makeText(holder.itemView.context, "${item.hargaproduk}", Toast.LENGTH_SHORT).show()
                                    listener.onTambah(item.totalperproduk)
                                } else if (item.stokproduk >= 10 ){
                                    holder.tvStokProduk.text = item.stokproduk.toString()

                                    item.totalperproduk = item.stokproduk*(item.hargastart - potonganHarga)
                                    val getitemcart = holder.tvStokProduk.text.toString().toInt()
                                    var data =
                                        Cart(no = item.no, noproduk = item.noproduk, idproduk = item.idproduk,
                                            namaproduk = item.namaproduk, hargaproduk = item.hargastart - potonganHarga,
                                            hargastart = item.hargastart,
                                            gambarproduk = item.gambarproduk, jenisboronganproduk = "grosir",
                                            stokproduk = getitemcart, totalperproduk = item.totalperproduk, beratproduk = item.beratproduk)
                                    updatecart(data)
                                    Toast.makeText(holder.itemView.context, "${item.hargaproduk}", Toast.LENGTH_SHORT).show()
                                    listener.onTambah(item.totalperproduk)
                                } else {
                                    Toast.makeText(holder.itemView.context, "Maaf, stok produk sudah berada dibawah 5, silahkan pilih produk yang lain", Toast.LENGTH_SHORT).show()
                                }
                            } else if (item.stokproduk == 0){
                                holder.tvStokProduk.text = "0"
                                holder.tvCartRealPrice.text = "0"
                                holder.tvCartRealPrice2.text = "0"

                                item.totalperproduk = 0
                                val getitemcart = holder.tvStokProduk.text.toString().toInt()
                                var data =
                                    Cart(no = item.no, noproduk = item.noproduk, idproduk = item.idproduk,
                                        namaproduk = item.namaproduk, hargaproduk = 0,
                                        hargastart = item.hargastart,
                                        gambarproduk = item.gambarproduk, jenisboronganproduk = "grosir",
                                        stokproduk = getitemcart, totalperproduk = item.totalperproduk, beratproduk = item.beratproduk)
                                updatecart(data)
                                Toast.makeText(holder.itemView.context, "${item.hargaproduk}", Toast.LENGTH_SHORT).show()
                                listener.onTambah(item.totalperproduk)
                            } else {
                                Toast.makeText(holder.itemView.context, "Maaf, stok produk sudah berada dibawah 5, silahkan pilih produk yang lain", Toast.LENGTH_SHORT).show()
                            }

                        }
                    }

                    override fun onFailure(call: Call<ProductResponse>, t: Throwable) {
                        Toast.makeText(holder.itemView.context, "error $t", Toast.LENGTH_SHORT).show()
                    }

                })
            }
        }

        holder.llItemCartDeleteItem.setOnClickListener {
            dao.delete(listItems[position])
            listItems.removeAt(position)
            notifyDataSetChanged()
            notifyItemRangeChanged(position, listItems.size)
        }

        holder.btnTambahProduk.setOnClickListener {
            val fragmentManager = holder.itemView.context.findFragmentManager()
            if (fragmentManager != null) {
                // Perform the fragment transaction here
                val targetActivity = Dashboard_bottombar()
                val targetFragment = DashboardFragment_idle(targetActivity)
                fragmentManager.beginTransaction()
                    .replace(R.id.frame_layout, targetFragment)
                    .commit()
            }
        }
    }

}

private fun Context.findFragmentManager(): FragmentManager?{
    val activity = this as? FragmentActivity
    return activity?.supportFragmentManager
}

whats wrong with my code? i need to update update tv_cart_realprice2 automatically without move to another fragment.

L. Swifter
  • 3,179
  • 28
  • 52

0 Answers0