I am using a recyclerview(id recyclerView) inside a fragment(viewContractorsFragment), I have inflated the root view of the fragment layout and initialized the recycler view. Also the respective adapter and layout managers are set properly. But when loaded the fragment containing the recyclerview is blank.

ViewContractorsFragment.kt

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             tools:context=".fragments.ViewContractorsFragment">

    <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

    </android.support.v7.widget.RecyclerView>
</FrameLayout>

contract_list_row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:focusable="true"
        android:clickable="true"
        android:padding="16dp"
        android:background="?android:attr/selectableItemBackground"
        android:orientation="vertical">

    <android.support.v7.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:backgroundTint="@color/colorWhite"
            app:cardCornerRadius="8dp"
            app:cardElevation="8dp">

        <LinearLayout
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:padding="4dp">

            <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:padding="16dp"
                    android:orientation="vertical">

                <TextView android:layout_width="wrap_content"
                          android:layout_height="wrap_content"
                          android:id="@+id/tv_contractor_name"
                          android:text="Rana Prathap"
                          android:textStyle="bold"
                          android:textSize="24sp"
                          android:textColor="@android:color/black"
                          android:paddingTop="16dp"
                          android:paddingBottom="8dp"/>

                <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Event Photographer"
                        android:id="@+id/tv_contractor_profession"
                        android:textAllCaps="true"
                        android:paddingBottom="8dp"
                        android:textSize="18sp"
                        android:textStyle="bold"
                        android:textColor="@android:color/holo_green_dark"/>
                <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:orientation="horizontal">

                    <RatingBar
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:id="@+id/rb_contractor_rating"
                            android:rating="4"
                            android:layout_marginTop="2dp"
                            android:paddingTop="8dp"
                            style="?android:attr/ratingBarStyleSmall"
                            android:numStars="5"
                            android:stepSize="0.5"
                            android:clickable="false"
                            android:focusable="false"
                            android:isIndicator="true"/>

                    <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:id="@+id/tv_contractor_rating"
                            android:textSize="24sp"
                            android:layout_marginLeft="8dp"
                            android:textColor="@android:color/black"
                            android:textStyle="bold"
                            android:text="4.5"/>


                </LinearLayout>


            </LinearLayout>

            <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"

                    android:orientation="vertical">
                <ImageView
                        android:layout_width="125dp"
                        android:layout_height="100dp"
                        android:src="@mipmap/ic_health_fitness"
                        android:scaleType="fitXY"/>

                <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:orientation="horizontal"
                        android:layout_marginTop="4dp">
                    <ImageView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:src="@drawable/ic_phone_blue_24dp"
                            android:padding="8dp"/>
                    <ImageView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:src="@drawable/ic_message_blue_24dp"
                            android:padding="8dp"/>

                    <ImageView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:src="@drawable/ic_share_blue_24dp"
                            android:padding="8dp"/>

                </LinearLayout>

            </LinearLayout>


        </LinearLayout>

    </android.support.v7.widget.CardView>
</LinearLayout>

ContractorAdapter.kt

class ContractorAdapter(val context: Context?, val contractorsList: List<Contractor>) : RecyclerView.Adapter<ContractorAdapter.ContractViewHolder>()
{
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ContractViewHolder {
        val itemView = LayoutInflater.from(context).inflate(R.layout.contract_list_row,parent,false)
        return ContractViewHolder(itemView)
    }

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

    override fun onBindViewHolder(holder: ContractViewHolder, position: Int) {

       val contractor = contractorsList[position]
        holder.setData(contractor,position)
    }

    inner class ContractViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){

        fun setData(contractor: Contractor?, position: Int) {
            itemView.tv_contractor_name.text = contractor!!.name
            itemView.tv_contractor_profession.text = contractor!!.profession
            itemView.tv_contractor_rating.text = contractor!!.rating.toString()
            itemView.rb_contractor_rating.rating = contractor!!.rating
        }
    }
}

ViewContractorsFragment.kt

class ViewContractorsFragment : Fragment() {

    private lateinit var recyclerViewContractors: RecyclerView
    private lateinit var rootView: View

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        rootView = inflater.inflate(R.layout.fragment_view_contractors, container, false)
        recyclerViewContractors = rootView.findViewById(R.id.recyclerView) as RecyclerView
        initAdapter()
        return view
    }

    override fun onResume() {
        super.onResume()

        // Showing and setting the title for the dashboard activity when the fragment is loaded
        (activity as AppCompatActivity).supportActionBar!!.show()
        (activity as AppCompatActivity).supportActionBar!!.title = resources.getString(R.string.view_contracts)
    }

    override fun onStop() {
        super.onStop()

        // Hiding the support action bar in the dashboard activity when fragment exits
        (activity as AppCompatActivity).supportActionBar!!.hide()
    }

    private fun initAdapter() {
        val layoutManager = LinearLayoutManager(activity)
        layoutManager.orientation = LinearLayoutManager.VERTICAL
        recyclerViewContractors.layoutManager = layoutManager

        recyclerViewContractors.adapter = ContractorAdapter(activity, Supplier.contractorsList)
    }
}

1 Answers

0
Viswanath Kumar Sandu On Best Solutions

You are inflating the fragment layout into rootView and using a different variable view to return

Modify it as below

override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        rootView = inflater.inflate(R.layout.fragment_view_contractors, container, false)
        recyclerViewContractors = rootView.findViewById(R.id.recyclerView) as RecyclerView
        initAdapter()
        return rootview
    }

If the issue still persists, check if Supplier.contractorsList has the data