当前位置: 首页 > 知识库问答 >
问题:

从适配器类调用片段方法

况景龙
2023-03-14

但问题是我想知道如何从类中的片段调用方法?这是我的代码

    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
            }
        }

    }


}

下面是在活动中工作但在片段中不工作的代码

共有1个答案

长孙朝明
2023-03-14

通常,您的数据类以及不应该是可变的,在这种情况下,应该是这样的:

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)
        }
    }    
}

所有其他突变都属于适配器项之外,并且可能在片段中处理。

class YourFragment: Fragment(), BindCartItemList.ActionHandler {
    ....

要更新项,可以刷新适配器中的项,也可以使用item.notifychanged()

 类似资料:
  • 问题内容: 这个想法是我有一个列表视图,其中每个项目都是一个产品,当我单击该项目时,我需要从列表视图的适配器内部的单击中转到另一个片段。 我的适配器是: 您必须假设所有代码都在工作。 如何转到适配器内的产品Fragment? 问题答案: 为了解决这个问题,我要做的是: 在主类中,我将参数作为值,并通过开关在我感兴趣的main中设置了片段。

  • 问题内容: 我的片段中有一个方法。此方法启动一个新的活动。我想从我的调用此方法。 这是我的代码: HomeFragment.java StaggeredAdapter.java 我该怎么做? 问题答案: 编辑: 这是我现在要使用的。下面提供了较旧的“更轻松”的解决方案。 现在,可以从适配器中的任何位置调用该片段中的方法。 而且,除了通过构造函数提供侦听器之外,我们还可以在适配器中添加另一个方法,例

  • 我有一个使用RecyclerView的列表,我想要的是,当我点击列表项时,它会打开一个片段,我一直在搜索,我只在一个活动中找到了它,但我只在片段中工作,如果我使用活动,它会随着我的操作栏消失,它都在片段中设置。 这是我的适配器类: 我需要将信用卡id发送到片段,调用控制器并从数据库中获取信息,我尝试了使用intent,但只有在使用startActivity(intent)调用活动时才有效。 这里是

  • 错误:(117,63)错误:不兼容的类型:TabThree碎片无法转换为上下文 错误显示在"new GridViewAdapter(这个,图像,名称);" 公共类TabThreeFragment扩展了片段{ //返回inflater.inflate(R.layout.tab_three_fragment,容器,false);} //RequestQueue RequestQueue=截击。newR

  • 我有一个片段类,我想在我的活动的“main”类中调用一个方法。fragment类是静态的,所以这可能是导致问题的原因,尽管我必须使它保持静态。我希望能够在静态类中执行类似的操作: