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.