Android RecyclerView

RecyclerView

RecyclerView is Customizable, Flexible List like view. Different from ListView.

Preparation

build.gradle

implementation 'androidx.recyclerview:recyclerview:1.1.0-beta04'

Add recyclerview support library

Coding Flow

  1. Prepare row (item) layout
  2. Prepare Activity layout
  3. Prepare data class
  4. Prepare Adapter
  5. Add adapter to Activity

Flow is same as ListView

recyclerview_row.xml

This is one item layout

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <ImageView
        android:id="@+id/mainicon"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:src="@drawable/nogizaka"
        android:scaleType="fitCenter"/>

    <TextView
        android:id="@+id/mainname"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_marginStart="8dp"
        app:layout_constraintStart_toEndOf="@id/mainicon"
        app:layout_constraintTop_toTopOf="@id/mainicon" />

    <TextView
        android:id="@+id/maindate"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="3dp"
        android:textSize="12sp"
        app:layout_constraintStart_toEndOf="@id/mainname"
        app:layout_constraintTop_toTopOf="@id/mainname" />

    <TextView
        android:id="@+id/content"
        android:layout_width="300dp"
        android:layout_height="0dp"
        android:layout_below="@+id/mainname"
        android:layout_marginStart="8dp"
        android:layout_marginTop="4dp"
        android:textStyle="bold"
        app:layout_constraintStart_toEndOf="@id/mainicon"
        app:layout_constraintTop_toBottomOf="@id/mainname" />


</androidx.constraintlayout.widget.ConstraintLayout>

activity_recyclerview.xml

This is main Activity Layout

<?xml version="1.0" encoding="utf-8"?>
<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=".activity.RecyclerViewActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/nogiRecyclerView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">
    </androidx.recyclerview.widget.RecyclerView>

</androidx.constraintlayout.widget.ConstraintLayout>

This is very simple, only RecyclerView is in

RecyclerData.kt

This is data class used by RecyclerView

data class RecyclerData(val content: String, val date: String, val name: String)

RecyclerDataAdapter.kt

Adapter class

class RecyclerDataAdapter(private val context: Context, private val list: List<RecyclerData>):
        RecyclerView.Adapter<RecyclerDataAdapter.RecyclerDataHolder>() {

    class RecyclerDataHolder(view: View) : RecyclerView.ViewHolder(view) {
        // View?
        val iconView : ImageView = view.findViewById(R.id.mainicon)
        val nameTextView : TextView = view.findViewById(R.id.mainname)
        val dateTextView : TextView = view.findViewById(R.id.maindate)
        val contentTextView : TextView = view.findViewById(R.id.content)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerDataHolder {
        return RecyclerDataHolder(LayoutInflater.from(context).inflate(R.layout.recyclerview_row, parent, false))
    }

    override fun getItemCount(): Int = list.size

    override fun onBindViewHolder(holder: RecyclerDataHolder, position: Int) {
        // Bind
        holder.iconView.setImageResource(R.drawable.nogizaka)
        holder.nameTextView.text = list[position].name
        holder.dateTextView.text = list[position].date
        holder.contentTextView.text = list[position].content
    }
}

RecyclerViewActivity.kt

Main Activity class. Prepare data and adapter. Set adapter to RecyclerView

class RecyclerViewActivity : Activity() {


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_recyclerview)

        // Create sample test data
        val list = mutableListOf<RecyclerData>()
        list.add(RecyclerData("Tsundere", "2019/12/25", "Saito, Asuka"))
        list.add(RecyclerData("Cute", "2019/12/28", "Hori, Miona"))
        list.add(RecyclerData("Yancha", "2019/12/30", "Kosaka, Nao"))


        findViewById<RecyclerView>(R.id.nogiRecyclerView).also {
              it.adapter = RecyclerDataAdapter(this, list)
              it.layoutManager = LinearLayoutManager(this)
        }

    }
}

Result

Android
スポンサーリンク
Professional Programmer2

コメント