Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:在我的自定义适配器中使用数据绑定时不分配值_Android_Kotlin_Android Recyclerview_Android Databinding - Fatal编程技术网

Android:在我的自定义适配器中使用数据绑定时不分配值

Android:在我的自定义适配器中使用数据绑定时不分配值,android,kotlin,android-recyclerview,android-databinding,Android,Kotlin,Android Recyclerview,Android Databinding,我正在尝试将适配器的绑定变量传递给ViewHolder,以将值分配给适配器中的TextView,但这些值没有分配,单击侦听器也没有执行任何操作 下面是我的适配器类: class DoneAppointmentsAdapter(var context: DoneAppointmentsFragment, listener: ContentListener, var arrayList: List<Appointment>) : RecyclerView.Adapter<D

我正在尝试将适配器的绑定变量传递给ViewHolder,以将值分配给适配器中的TextView,但这些值没有分配,单击侦听器也没有执行任何操作

下面是我的适配器类:

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)
            }
        }
    }
}
类DoneAppointmentsAdapter(变量上下文:DoneAppointmentsFragment,侦听器:ContentListener,变量arrayList:List):
RecyclerView.Adapter(){
私有val侦听器:ContentListener=侦听器
私有变量绑定:doneappointsadapterbinding?=null
var活动=上下文
覆盖视图保持器(
父对象:视图组,
视图类型:Int
):物品持有人{
val viewHolder=LayoutInflater.from(parent.context)
.充气(R.layout.done\u适配器,父级,错误)
binding=doneappointsadapterbinding.flate(LayoutInflater.from(parent.context))
returnitemHolder(viewHolder、binding、parent.context)
}
覆盖onBindViewHolder(holder:ItemHolder,position:Int){
holder.bind(arrayList,listener)
}
重写getItemCount():Int{
返回arrayList.size
}
类ItemHolder(视图:视图,变量绑定:doneappointsadapterbinding?,val上下文:context):RecyclerView.ViewHolder(视图){
趣味绑定(listOfData:List,listener:ContentListener){
val dataListItem=listOfData[adapterPosition]
binding?.donePatientItemName?.text=“${dataListItem.patientName}”
绑定?.donePaientItemTime?.text=“某个日期”
绑定?.DonePatientTempatientInfo?.setOnClickListener{
tempAppointmentId=dataListItem.id
listener.onPatientThistoryViewClicked(dataListItem.requestedBy)
}
绑定?.DonePaientItemReviewCase?.setOnClickListener{
AmendDescriptionWarning(dataListItem,上下文)
}
binding.donePatientItemViewCase.setOnClickListener{
startPreview(数据列表项)
}
}
}
}

您在创建ViewHolder的
内部搞糟了。您已经创建了两次视图,一次是使用
LayoutInflater.from(parent.context)
,一次是使用
DoneAppointmentsAdapterBinding.flate
。在这种情况下,只有一个
doneappointsadapterbinding

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)
            }
        }
    }
}
类DoneAppointmentsAdapter(变量上下文:DoneAppointmentsFragment,侦听器:ContentListener,变量arrayList:List):
RecyclerView.Adapter(){
私有val侦听器:ContentListener=侦听器
覆盖视图保持器(
父对象:视图组,
视图类型:Int
):物品持有人{
val binding=doneappointsadapterbinding.inflate(LayoutInflater.from(parent.context))
退货物品持有人(有约束力)
}
覆盖onBindViewHolder(holder:ItemHolder,position:Int){
holder.bind(arrayList,listener)
}
重写getItemCount():Int{
返回arrayList.size
}
类ItemHolder(变量绑定:DoneAppointmentsAdapterBinding):RecyclerView.ViewHolder(binding.root){
趣味绑定(listOfData:List,listener:ContentListener){
val dataListItem=listOfData[adapterPosition]
binding.donePatientItemName.text=“${dataListItem.patientName}”
binding.donePatientItemTime.text=“某个日期”
binding.donepatientTempatientInfo.setOnClickListener{
tempAppointmentId=dataListItem.id
listener.onPatientThistoryViewClicked(dataListItem.requestedBy)
}
binding.DonePaientItemReviewCase.setOnClickListener{
AmendDescriptionWarning(dataListItem,binding.donePaientItemReviewCase.context)
}
binding.donePatientItemViewCase.setOnClickListener{
startPreview(数据列表项)
}
}
}
}
应该是这样的。我还从
ItemHolder
中删除了多余的无用参数。
为了清楚起见,代码的问题是
RecyclerView.ViewHolder(view)
当您在
binding上执行所有操作和内容时,您传递了
view
,这些保留是
view
的两个不同实例。这应该用上面的代码修复。

我不确定我是否使用了正确的模式来处理数据绑定和适配器。谢谢你帮我纠正我的错误。标记已解决!