Recyclerview does not show list properly

Viewed 69

I'm trying to create simple Recyclerview with view binding.

The problem is that my recycler view has no divider. it seems all of my items are

in one row.

Here are my codes :

Here is activity_main.xml :

<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"

>

    <com.google.android.material.appbar.MaterialToolbar
        android:id="@+id/tool"
        android:background="@color/c4"
        android:layout_width="0dp"
        app:title="Kotlin-Recyclerview"
        app:titleTextColor="@color/white"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0" />


    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
       android:layout_marginTop="55dp"
        android:padding="4dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tool" />



</androidx.constraintlayout.widget.ConstraintLayout>

Here is recyclerview_rows.xml :


<androidx.cardview.widget.CardView 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="wrap_content">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="30sp"
            android:textColor="@color/black"
            android:text="Name"
            android:textStyle="bold"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.09"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.04000002" />


    </androidx.constraintlayout.widget.ConstraintLayout>


</androidx.cardview.widget.CardView>


RV.Model.kt :

data class RV_Model(val name:String)

RV_Adapter.kt :

class RV_Adapter(private val mylist:List<RV_Model>) :RecyclerView.Adapter<RV_Adapter.MyViewholder>() {

    lateinit var adapter_binding:RecyclerviewRowsBinding

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewholder {

         adapter_binding = RecyclerviewRowsBinding.inflate(LayoutInflater.from(parent.context),parent,false);

        return MyViewholder(adapter_binding)

    }

    override fun onBindViewHolder(holder: MyViewholder, position: Int) {
        val current_item = mylist[position]
        adapter_binding.text.text= current_item.name

    }

  class MyViewholder(val adapter_binding:RecyclerviewRowsBinding) :RecyclerView.ViewHolder(adapter_binding.root) {

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


}

MainActivity.kt :


class MainActivity : AppCompatActivity() {

   lateinit var binding:ActivityMainBinding
   var mylist= ArrayList<RV_Model>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
         binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)


        set_data()

        binding.recyclerView.layoutManager= LinearLayoutManager(this)
        binding.recyclerView.adapter=RV_Adapter(mylist)
        binding.recyclerView.setHasFixedSize(true)







        }


    fun set_data() {

       mylist.add(RV_Model("A"))
       mylist.add(RV_Model("B"))
       mylist.add(RV_Model("C"))
        mylist.add(RV_Model("D"))

    }


 }

what is the problem ?

[Here is the image :1

4 Answers

There are a lot of ways to create things that divide or sit between items in the list (e.g. adding a visual element to the bottom of your item layout, or adding visual items between your data items) but the simplest way is to just use the standard divider ItemDecoration:

val divider = DividerItemDecoration(requireContext(), layoutManager.orientation)
recyclerView.addItemDecoration(divider)

There isn't one by default (as you've noticed!)

There are many ways to create a divider between items.

  1. You can simply put a view with a height of 1dp(you can change it according to your need) below your text view.
  2. You can use a standard divider.

Put a view below your textview:-

<androidx.cardview.widget.CardView 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="wrap_content">

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:textColor="@color/black"
        android:text="Name"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.09"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.04000002" />

    <View
        android:layout_width="match_parent"
        android:layout_height="@dimen/d1"
        app:layout_constraintTop_toBottomOf="@id/text"
        android:background="#000000"/>

</androidx.constraintlayout.widget.ConstraintLayout>

</androidx.cardview.widget.CardView>

standard way:

    val mDividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(),
         mLayoutManager.getOrientation());
 recyclerView.addItemDecoration(mDividerItemDecoration);

Hello bro try this code to work fine!

Here is recyclerview_rows.xml :

<androidx.cardview.widget.CardView 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="wrap_content"
    android:elevation="15dp"
    android:layout_margin="10dp">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="10dp">

        <TextView 
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Name"
            android:textColor="@color/black"
            android:textSize="30sp"
            android:textStyle="bold"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.09"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.04000002" />


    </androidx.constraintlayout.widget.ConstraintLayout>


</androidx.cardview.widget.CardView>

change height of recyclerview's and row textview's to wrap content.

Related