【初心者向け】RecyclerViewの実装方法を解説【Kotlin,Android】

Androidアプリ開発
記事内に広告が含まれています。

この記事ではKotlinを使ったRecyclerViewの実装方法を解説します。

初心者の方にもわかりやすくするためにサンプルコード付きで説明しています。

実装

全体のサンプルコード

こちらが全体のサンプルコードです。先に解説を確認したい方はこちらから読んでください。

RecyclerviewAdapter

package com.example.recyclerviewsample

import android.content.Intent
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView

class RecyclerviewAdapter : RecyclerView.Adapter<ViewHolderItem>(){
    private val itemList = listOf<Long>(1,2,3,4,5)
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolderItem {
        val oneXml = LayoutInflater.from(parent.context).inflate(R.layout.one_layout,parent,false)
        return ViewHolderItem(oneXml)
    }

    override fun onBindViewHolder(holder: ViewHolderItem, position: Int) {
        holder.oneTextView.text = itemList[position].toString()
    }

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

ViewHolderItem

package com.example.recyclerviewsample

import android.view.View
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView

class ViewHolderItem(v:View): RecyclerView.ViewHolder(v){
    var oneTextView:TextView = v.findViewById(R.id.oneText)
}

one_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
    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="wrap_content"
    app:cardUseCompatPadding="true"
    app:cardElevation="6dp"
    app:cardCornerRadius="2dp"
    android:foreground="?android:attr/selectableItemBackground">

    <TextView
        android:id="@+id/oneText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_marginBottom="16dp"
        android:layout_gravity="center"
        android:text="1"
        android:textSize="20sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.cardview.widget.CardView>

MainActivity

package com.example.recyclerviewsample

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView

class MainActivity : AppCompatActivity() {

    private lateinit var rv:RecyclerView
    private lateinit var recyclerAdapter: RecyclerviewAdapter
    private lateinit var layoutManager: RecyclerView.LayoutManager

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

        rv = findViewById(R.id.rv)
    }

    override fun onStart() {
        super.onStart()
        recyclerAdapter = RecyclerviewAdapter()
        rv.adapter = recyclerAdapter
        layoutManager = LinearLayoutManager(this)
        rv.layoutManager = layoutManager
    }
}

activity_main.xml

<?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=".MainActivity">

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

</androidx.constraintlayout.widget.ConstraintLayout>

解説

ここからRecyclerViewの実装方法を詳しく解説していきます。

activity_main.xml

今回はactivity_mainには特にこだわらないのでRecyclerViewだけ設置しています。

one_layout.xml

layoutにone_layout.xmlを追加しましょう。

one_layout.xmlではRecyclerViewに表示する1行分のセルのレイアウトを定義します。

今回は見栄えのためにCardViewを使っていますが、デフォルトのConstraintLayoutのままでも構いません。

<androidx.cardview.widget.CardView
    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="wrap_content"
    app:cardUseCompatPadding="true"
    app:cardElevation="6dp"
    app:cardCornerRadius="2dp"
    android:foreground="?android:attr/selectableItemBackground">

    …

</androidx.cardview.widget.CardView>

番号を表示するために中央にTextViewを配置しています。

<TextView
    android:id="@+id/oneText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:layout_marginBottom="16dp"
    android:layout_gravity="center"
    android:text="1"
    android:textSize="20sp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

ViewHolderItem

プロジェクトにViewHolderItemという名前のクラスファイルを追加してください。

ViewHolderItemではRecyclerViewに表示するセルの設定をします。

class ViewHolderItem(v:View): RecyclerView.ViewHolder(v){
    var oneTextView:TextView = v.findViewById(R.id.oneText)
}

RecyclerviewAdapter

プロジェクトにRecyclerviewAdapterという名前のクラスファイルを追加しましょう。

RecyclerviewAdapterではファイル名の通りRecyclerViewのAdapterを定義します。

今回RecyclerViewに配置する要素はlistに格納してある1~5までの数字にしています。

private val itemList = listOf<Long>(1,2,3,4,5)

onCreateViewHolderではセルのレイアウトの読み込みとViewHolderItemとの紐づけをしています。

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolderItem {
    val oneXml = LayoutInflater.from(parent.context).inflate(R.layout.one_layout,parent,false)
    return ViewHolderItem(oneXml)
    }

今回はonBindViewHolderではitemListの要素をセルに表示するようにします。

クリックされたときの挙動を指定する場合などもonBindViewHolderに記述します。

override fun onBindViewHolder(holder: ViewHolderItem, position: Int) {
    holder.oneTextView.text = itemList[position].toString()
}

getItemCountではRecyclerViewに表示するセルの数をカウントしています。

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

MainActivity

MainActivityでRecyclerViewのレイアウトの指定をしたりセルを表示できるようにしたりしています。

今回はonStart内に記述していますがonCreate内に記述しても大丈夫です。

MainActivity

override fun onStart() {
    super.onStart()
    recyclerAdapter = RecyclerviewAdapter()
    rv.adapter = recyclerAdapter
    layoutManager = LinearLayoutManager(this)
    rv.layoutManager = layoutManager
}

まとめ

今回はRecyclerViewの実装方法を解説しました。いかがだったでしょうか。

RecyclerViewは実装することが多くて大変ですがとても便利です。この記事を参考にして是非実装してみてください。

以下の記事ではRecyclerViewをクリックして画面遷移する方法を紹介しています。こちらも併せてお読みください。

コメント

タイトルとURLをコピーしました