Sunday, January 19, 2020

How to create recyclerview using kotlin in android studio

A Simple example to create a RecyclerView using Kotlin Language.
Step 1. build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.pratap.kotlinrecyclerview"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation 'com.android.support:design:26.1.0'
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support:recyclerview-v7:26.1.0'
    implementation 'com.android.support:cardview-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
Step 2. Create a class Student.kt
create model class in kotlin like below
data class Student(val name: String, val email: String)
Step 3. Create a class MainActivity.kt
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val recyclerView: RecyclerView = findViewById(R.id.recyclerView)
        //adding a layoutmanager
        recyclerView.layoutManager = LinearLayoutManager(this, LinearLayout.VERTICAL, false)

        //crating an arraylist to store users using the data class user
        val users = ArrayList<Student>()

        //adding some dummy data to the list
        for (i in 1..10) {
            users.add(Student("Student " + i, "Student" + i + "@gmail.com"))
        }

        //creating our adapter
        val adapter = StudentsAdapter(users)
        //now adding the adapter to recyclerview
        recyclerView.adapter = adapter

    }
}
Step 4. Creat a layout activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
</LinearLayout>
Step 5. Create a custom layout recyclerview list_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:foreground="?android:attr/selectableItemBackground"
        >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <TextView
                android:id="@+id/txt_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:text=""
                android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium" />
            <TextView
                android:id="@+id/txt_email_id"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:text=""
                android:textAppearance="@style/Base.TextAppearance.AppCompat.Small" />
        </LinearLayout>
    </android.support.v7.widget.CardView>
</LinearLayout>
Step 6. Custom adapter recyclerview StudentsAdapter.kt
class StudentsAdapter(val studentList: ArrayList<Student>) : RecyclerView.Adapter<StudentsAdapter.ViewHolder>() {

    //this method is returning the view for each item in the list
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): StudentsAdapter.ViewHolder {
        val v = LayoutInflater.from(parent.context).inflate(R.layout.list_row, parent, false)
        return ViewHolder(v)
    }
    //this method is binding the data on the list
    override fun onBindViewHolder(holder: StudentsAdapter.ViewHolder, position: Int) {
        holder.bindItems(studentList[position])
    }
    //this method is giving the size of the list
    override fun getItemCount(): Int {
        return studentList.size
    }

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        fun bindItems(student: Student) {
            val txt_name: TextView = itemView.findViewById(R.id.txt_name)
            val txt_email_id: TextView = itemView.findViewById(R.id.txt_email_id)
            txt_name.text = student.name
            txt_email_id.text = student.email

            //set the onclick listener for the list item
            itemView.setOnClickListener({
                Toast.makeText(itemView.context, student.name + "\n" + student.email, Toast.LENGTH_LONG).show();
            })
        }
    }
}
Result:
How to create recycleview using kotin in android studio