У меня есть RecyclerViewAdapter для приложения для корзины покупок, написанного на Kotlin.Когда пользователи изменяют количество товаров в своей корзине, я хотел бы обновить заголовок панели действий с текущей суммой корзины.
Я посмотрел на различный код с помощью обратных вызовов, слушателей и передаваемого контекста, чтобы попытаться получить доступ к ActionBar из RecyclerViewAdapter, но я не знаю, применимы ли они к Kotlin, и при этом они не имеют большого смысла, имеявсегда держал весь мой код в RecyclerViewAdapter (поиск в базе данных, запись, обновления CardView и т. д.)
Вот очень сокращенный код для моего вызывающего кода и RecyclerViewAdapter (но я надеюсь, что у меня есть всеважные компоненты):
class ItemRecyclerViewAdapter(private val itemArray: MutableList<ItemObject>, private val contextABC: Context) : RecyclerView.Adapter<ItemRecyclerViewAdapter.ViewHolder>() {
inner class ViewHolder(v: View) : RecyclerView.ViewHolder(v) {
private val cardViewAdd: Button
init {
cardViewAdd = v.findViewById<View>(R.id.cardview_item_Add) as Button
// Add one to Qty Ordered
cardViewAdd.setOnClickListener { updateItemQty(adapterPosition, itemArray[adapterPosition].qtyOrdered + 1, v) }
}
}
private fun updateItemQty(arrayPosition: Int, pQtyOrdered: Int, v: View) {
itemArray[arrayPosition].qtyOrdered = pQtyOrdered
notifyItemChanged(arrayPosition)
}
}
class CartActivity : BaseActivity() {
internal var cartItemsList: MutableList<ItemObject> = ArrayList()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.cart_master)
cartItemsList = DatabaseAdapter.cartItems
cart_RecyclerView.setHasFixedSize(true)
cart_RecyclerView.layoutManager = LinearLayoutManager(this)
rvAdapter = ItemRecyclerViewAdapter(cartItemsList, this)
cart_RecyclerView.adapter = rvAdapter
}
}
Кто-нибудь может заставить меня двигаться в правильном направлении?Я, конечно, ценю помощь!
[Редактировать] С большой помощью Бирю Вачхани, вот мой рабочий код:
class ItemRecyclerViewAdapter(private val itemArray: MutableList<ItemObject>,
private val contextABC: Context, val updateActionBarTitle: (ItemObject) -> Unit = {})
: RecyclerView.Adapter<ItemRecyclerViewAdapter.ViewHolder>() {
inner class ViewHolder(v: View) : RecyclerView.ViewHolder(v) {
private val cardViewAdd: Button
init {
cardViewAdd = v.findViewById<View>(R.id.cardview_item_Add) as Button
// Add one to Qty Ordered
cardViewAdd.setOnClickListener { updateItemQty(adapterPosition, itemArray[adapterPosition].qtyOrdered + 1, v) }
}
}
private fun updateItemQty(arrayPosition: Int, pQtyOrdered: Int, v: View) {
itemArray[arrayPosition].qtyOrdered = pQtyOrdered
notifyItemChanged(arrayPosition)
updateActionBarTitle(itemArray[arrayPosition])
}
}
class CartActivity : BaseActivity() {
internal var cartItemsList: MutableList<ItemObject> = ArrayList()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.cart_master)
cartItemsList = DatabaseAdapter.cartItems
cart_RecyclerView.setHasFixedSize(true)
cart_RecyclerView.layoutManager = LinearLayoutManager(this)
rvAdapter = ItemRecyclerViewAdapter(cartItemsList, this){item->
supportActionBar?.setTitle("hi")
}
cart_RecyclerView.adapter = rvAdapter
}
}