Android:在我的自定义适配器中使用数据绑定时不分配值
我正在尝试将适配器的绑定变量传递给ViewHolder,以将值分配给适配器中的TextView,但这些值没有分配,单击侦听器也没有执行任何操作 下面是我的适配器类: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
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
的两个不同实例。这应该用上面的代码修复。我不确定我是否使用了正确的模式来处理数据绑定和适配器。谢谢你帮我纠正我的错误。标记已解决!