首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:在自定义适配器中使用数据绑定时未赋值

Android:在自定义适配器中使用数据绑定时未赋值
EN

Stack Overflow用户
提问于 2020-12-04 15:41:30
回答 1查看 27关注 0票数 0

我试图将适配器的绑定变量传递给ViewHolder,以便将值传递给适配器中的文本视图,但这些值没有赋值,单击侦听器也不做任何事情。

下面是我的适配器类:

代码语言:javascript
复制
class DoneAppointmentsAdapter(var context: DoneAppointmentsFragment, listener: ContentListener, var arrayList: List<Appointment>) :
    RecyclerView.Adapter<DoneAppointmentsAdapter.ItemHolder>() {

    private val listener: ContentListener = listener
    private var binding: DoneAppointmentsAdapterBinding? = null

    var activity = context
    override fun onCreateViewHolder(
        parent: ViewGroup,
        viewType: Int
    ): ItemHolder {
        val viewHolder = LayoutInflater.from(parent.context)
            .inflate(R.layout.done_appointments_adapter, parent, false)
        binding = DoneAppointmentsAdapterBinding.inflate(LayoutInflater.from(parent.context))
        return ItemHolder(viewHolder,binding, parent.context)
    }

    override fun onBindViewHolder(holder: ItemHolder, position: Int) {
        holder.bind(arrayList, listener)
    }

    override fun getItemCount(): Int {
        return arrayList.size
    }

    class ItemHolder(view: View, var binding: DoneAppointmentsAdapterBinding?, val context: Context) : RecyclerView.ViewHolder(view) {

        fun bind(listOfData: List<Appointment>, listener: ContentListener) {
            val dataListItem = listOfData[adapterPosition]

            binding?.donePatientItemName?.text = "${dataListItem.patientName}"
            binding?.donePatientItemTime?.text = "Some date"

            binding?.donePatientItemPatientInfo?.setOnClickListener {
                tempAppointmentId = dataListItem.id
                listener.onPatientHistoryViewClicked(dataListItem.requestedBy)
            }

            binding?.donePatientItemReviewCase?.setOnClickListener {
                amendPrescriptionWarning(dataListItem,context)
            }

            binding.donePatientItemViewCase.setOnClickListener {
                startPreview(dataListItem)
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-04 15:51:15

你在onCreateViewHolder里搞砸了。您已经创建了两次视图,一次是使用LayoutInflater.from(parent.context),一次是使用DoneAppointmentsAdapterBinding.inflate。在本例中应该只有一个DoneAppointmentsAdapterBinding

代码语言:javascript
复制
class DoneAppointmentsAdapter(var context: DoneAppointmentsFragment, listener: ContentListener, var arrayList: List<Appointment>) :
    RecyclerView.Adapter<DoneAppointmentsAdapter.ItemHolder>() {
    private val listener: ContentListener = listener

    override fun onCreateViewHolder(
        parent: ViewGroup,
        viewType: Int
    ): ItemHolder {
        val binding = DoneAppointmentsAdapterBinding.inflate(LayoutInflater.from(parent.context))
        return ItemHolder(binding)
    }

    override fun onBindViewHolder(holder: ItemHolder, position: Int) {
        holder.bind(arrayList, listener)
    }

    override fun getItemCount(): Int {
        return arrayList.size
    }

    class ItemHolder (var binding: DoneAppointmentsAdapterBinding) : RecyclerView.ViewHolder(binding.root) {
        fun bind(listOfData: List<Appointment>, listener: ContentListener) {
            val dataListItem = listOfData[adapterPosition]
            binding.donePatientItemName.text = "${dataListItem.patientName}"
            binding.donePatientItemTime.text = "Some date"
            binding.donePatientItemPatientInfo.setOnClickListener {
                tempAppointmentId = dataListItem.id
                listener.onPatientHistoryViewClicked(dataListItem.requestedBy)
            }
            binding.donePatientItemReviewCase.setOnClickListener {
                amendPrescriptionWarning(dataListItem,binding.donePatientItemReviewCase.context)
            }
            binding.donePatientItemViewCase.setOnClickListener {
                startPreview(dataListItem)
            }
        }
    }
}

应该是这样的。我还从ItemHolder中删除了多余的无用参数。为了弄清楚,你的代码的问题是RecyclerView.ViewHolder(view),当你在binding上做所有的动作和事情的时候,你传递的是view,这是View的两个不同的实例。这应该用上面的代码来修复。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65139672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档