【问题标题】:Kotlin nested RecyclerviewKotlin 嵌套 Recyclerview
【发布时间】:2020-01-06 16:41:26
【问题描述】:

如果有人可以帮助我,我真的很合适。

我将我的第二个 RecyclerView 与自定义滑动按钮对象一起应用,这里 fun handleSwipeClick 设置为处理该操作。

我的问题是:如何使这个函数 (handleSwipeClick) 专门处理每一行? Like 删除此行项目

适配器 #1

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val item = baxters[position]
        holder.listItem_time.text = item.intakeTime

        holder.itemView.dose_recycler_view.apply {
            dose_recycler_view.setHasFixedSize(true)
            layoutManager = LinearLayoutManager(context)
            dose_recycler_view.layoutManager = layoutManager

            //Swipe action
            val swipe = object: SwipeHelper(context,dose_recycler_view, 400){
                override fun instaniateSwipeButton(
                    viewHolder: RecyclerView.ViewHolder,
                    buffer: MutableList<SwipeButton>
                ) {
                    // Adding Buttons
                    buffer.add(
                        SwipeButton(context,
                            "",
                            30,
                            R.drawable.ic_check_circle,
                            Color.parseColor("#66ff66"),
                            object : ButtonClickListener {
                                override fun handleSwipeClick(id: Int) {
                                    // Click action
                                    // TODO call to change LAST TAKEN and NEW INTAKE
                                    Companion.errorToast(
                                        context,
                                        "Medicijn ingenomen. $id"
                                    )
                                }
                            })
                    )
                }

            }

            adapter = ClientDoseListAdapter(item.doses.toMutableList())
            setRecycledViewPool(viewPool)
        }
    }

适配器 #2

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val item = doses[position]

/// DELETE THIS ROW
        holder.med_name.text = item.medicineItem.name
        holder.dose_amount.text = item.amount.toString()
    }

【问题讨论】:

    标签: kotlin android-recyclerview


    【解决方案1】:

    首先在ClientDoseListAdapter适配器中创建一个delete方法,然后在点击动作中调用该方法,

    fun delete(dose: Dose) {
            val index: Int = doseList.indexOf(dose)
            doseList.removeAt(index)
            notifyDataSetChanged()
    }
    
    override fun handleSwipeClick(id: Int) { 
        // Click action 
        adapter.delete(adapter.getItem(viewHolder.adapterPosition)) 
    }
    

    【讨论】:

    • 非常感谢先生,我无法直接从adapte.delete() 调用delete 方法。但我通过初始化 ClientDoseAdapter 解决了这个问题。
    【解决方案2】:

    Adapetr #1 如下所示:

     override fun onBindViewHolder(holder: ViewHolder, position: Int) {
            val item = baxters[position]
            holder.listItem_time.text = item.intakeTime
    
            holder.itemView.dose_recycler_view.apply {
                dose_recycler_view.setHasFixedSize(true)
                layoutManager = LinearLayoutManager(context)
                dose_recycler_view.layoutManager = layoutManager
    
                // First init a new adapter
                dosesAdapter = ClientDoseListAdapter(item.doses.toMutableList())
    
    
                // Swipe action
                val swipe = object: SwipeHelper(context, dose_recycler_view, 400){
                    override fun instaniateSwipeButton(
                        viewHolder: RecyclerView.ViewHolder,
                        buffer: MutableList<SwipeButton>
                    ) {
                        // Adding Buttons
                        buffer.add(
                            SwipeButton(context,
                                "",
                                30,
                                R.drawable.ic_check_circle,
                                Color.parseColor("#66ff66"),
                                object : ButtonClickListener {
                                    override fun confirmDoseTaken(id: Int) {
                                        // Click action
                                        // TODO call to change LAST TAKEN and NEW INTAKE
                                        Companion.errorToast(
                                            context,
                                            "Medicijn ingenomen. $id"
                                        )
    
                                        // i can call removeItem method in adapter
                                        dosesAdapter.removeItem()
                                    }
                                })
                        )
                    }
    
                }
    
                // set recyclerView adapter
                adapter = dosesAdapter
                setRecycledViewPool(viewPool)
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-05
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多