我使用 Groupie 作为回收视图适配器并且 我能够在课堂内调用一个活动方法。 调用该方法的代码如下所示。
(it.context as <activity_name>).<function_name>()
但问题是我想知道如何从类内的片段调用方法? 这是我的代码
class BindCartItemList(val cartItem: CartList) : Item<GroupieViewHolder>() {
override fun getLayout() = R.layout.ryr_cartlist_with_select
override fun bind(viewHolder: GroupieViewHolder, position: Int) {
viewHolder.itemView.ryr_product_name.text = cartItem.product?.productName
viewHolder.itemView.ryr_quantity.setText(cartItem.quantity.toString())
viewHolder.itemView.ryr_product_barcode.text = cartItem.product?.productBarcode
//compact conversion
val mConvert = FormatConversion()
//default for display price and amount
viewHolder.itemView.ryr_unit_price.text = mConvert.compactAmount(cartItem.product?.price!!)
cartItem.amount = cartItem.quantity * cartItem.product?.price!!
viewHolder.itemView.ryr_amount.text = mConvert.compactAmount(cartItem.amount)
//quantity decrease
viewHolder.itemView.ryr_btn_decrease.setOnClickListener {
cartItem.quantity -= 1
//not allow user set qty < 1
if (cartItem.quantity < 1) {
cartItem.quantity = 1
} else {
//once button press qty and amount will be change
viewHolder.itemView.ryr_quantity.setText(cartItem.quantity.toString())
cartItem.amount = cartItem.quantity * cartItem.product?.price!!
viewHolder.itemView.ryr_amount.text = mConvert.compactAmount(cartItem.amount)
}
(it.context as PosActivity).updateTotalAmount()
}
//quantity increase
viewHolder.itemView.ryr_btn_increase.setOnClickListener {
cartItem.quantity += 1
viewHolder.itemView.ryr_quantity.setText(cartItem.quantity.toString())
cartItem.amount = cartItem.quantity * cartItem.product?.price!!
viewHolder.itemView.ryr_amount.text = mConvert.compactAmount(cartItem.amount)
(it.context as PosActivity).updateTotalAmount()
}
//press container_1 for checkbox
viewHolder.itemView.ryr_container_1.setOnClickListener {
if (viewHolder.itemView.ryr_selected.isChecked) {
viewHolder.itemView.ryr_selected.isChecked = false
cartItem.selected = false
} else if (!viewHolder.itemView.ryr_selected.isChecked) {
viewHolder.itemView.ryr_selected.isChecked = true
cartItem.selected = true
}
}
}
}
这是在活动中有效但在片段中无效的代码
答案 0 :(得分:1)
通常您的数据类以及您的 Item
不应该是可变的,在这种情况下,它看起来像这样:
class BindCartItemList(val cartItem: CartList, val actionHandler: ActionHandler) : Item<GroupieViewHolder>() {
interface ActionHandler {
fun onCartItemDecreaseClicked(cartItem: CartList)
fun onCartItemIncreaseClicked(cartItem: CartList)
fun onCartItemSelectionToggled(cartItem: CartList, shouldBeChecked: Boolean)
}
private val mConvert = FormatConversion() // compact conversion
override fun getLayout() = R.layout.ryr_cartlist_with_select
override fun bind(viewHolder: GroupieViewHolder, position: Int) {
viewHolder.itemView.ryr_product_name.text = cartItem.product?.productName
viewHolder.itemView.ryr_quantity.setText(cartItem.quantity.toString())
viewHolder.itemView.ryr_product_barcode.text = cartItem.product?.productBarcode
viewHolder.itemView.ryr_amount.text = mConvert.compactAmount(cartItem.quantity * cartItem.product?.price!!)
//quantity increase
viewHolder.itemView.ryr_btn_increase.setOnClickListener {
actionHandler.onCartItemIncreaseClicked(cartItem)
}
//quantity decrease
viewHolder.itemView.ryr_btn_decrease.setOnClickListener {
actionHandler.onCartItemDecreaseClicked(cartItem)
}
//press container_1 for checkbox
viewHolder.itemView.ryr_container_1.setOnClickListener {
val isChecked = viewHolder.itemView.ryr_selected.isChecked
actionHandler.onCartItemSelectionToggled(cartItem, !isChecked)
}
}
}
所有其他更改都属于适配器项之外,并且可能会在 Fragment 中处理。
class YourFragment: Fragment(), BindCartItemList.ActionHandler {
....
要更新项目,您可以刷新适配器中的项目,也可以使用 item.notifyChanged()
。