Search code examples
androiddata-bindingkotlinandroid-recyclerviewandroid-databinding

Constraint Layout with Data Binding is Unresponsive


Problem that I'm facing is Constraint Layout is completely unresponsive. Margins are not shown, onCLick Handlers are not working. Below I've attached 2 images. Check it out. Where am I going wrong? Need more code..? I can update just let me know.

  1. Row-Layout Class

     <?xml version="1.0" encoding="utf-8"?>
     <layout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto">
    <data>
    <variable
        name="lead"
        type="com.goplannr.model.LeadPojo" />
    
    <variable
        name="eventHandler"
       type="com.goplannr.fragment.contact.adapter.LeadClientRVAdapter" />
    
     </data>
    
    <android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="8dp"
    android:background="@color/colorControlActivated"
    android:onClick="@{(v) -> eventHandler.onRowItemClick(v)}">
    
    .... got 4 items inside
    
    </android.support.constraint.ConstraintLayout>
    
    </layout>
    
  2. RecyclerViewAdapter

     class LeadClientRVAdapter (private val leadDetailsList:ArrayList<LeadPojo>) :
    RecyclerView.Adapter<LeadClientRVAdapter.MyViewHolder>() {
    
     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
    val inflater = LayoutInflater.from(parent.context)
    val binding = RowLeadsClientsBinding.inflate(inflater)
    return MyViewHolder(binding)
    }
    
    override fun getItemCount(): Int = leadDetailsList.size
    
    override fun onBindViewHolder(holder: MyViewHolder, position: Int) = holder.bind(leadDetailsList[position])
    
    inner class MyViewHolder(private val binding: RowLeadsClientsBinding): RecyclerView.ViewHolder(binding.root){
    fun bind(item : LeadPojo){
        binding.lead = item
        binding.executePendingBindings()
    }}
    
    fun onRowItemClick(v: View){
    v.findNavController().navigate(R.id.action_contacts_fragment_to_lead_details_fragment)
    }}
    

With Data Binding - Without -

Another point - I only have this dependency in Gradle -> dataBinding { enabled true }

Nothing else


Solution

  • Inflation code is incorrect. Use this

     val binding = RowLeadsClientsBinding.inflate(inflater, parent, false)