RecyclerView

Kotlin

RecyclerViewはListViewより柔軟で多機能なリスト部品をつくれるので、現在はListViewよりもRecyclerViewを使うことが一般的

acitivity_main.xml

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/rvDriverList"
    android:layout_width=""  />

res/layout/item_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:id="@+id/item_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textStyle="bold"/>

    <TextView
        android:id="@+id/item_description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"/>
</LinearLayout>

kotlin+java/com.example.app/model/Item.kt(アダプタークラスの作成)

package com.example.app.model

data class Item(val title: String, val description: String)

kotlin+java/com.example.app/adapter/ItemAdapter.kt(アダプターの作成)

package your_package_name.adapter

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import your_package_name.R
import your_package_name.model.Item  // Itemクラスをインポート


class ItemAdapter(
    private val itemList: List<Item>,
    private val onItemClick: (Item) -> Unit
) : RecyclerView.Adapter<ItemAdapter.ItemViewHolder>() {

    class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val titleTextView: TextView = view.findViewById(R.id.item_title)
        val descriptionTextView: TextView = view.findViewById(R.id.item_description)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.item_layout, parent, false)  <--- ここでitem_layout.xmlを読み込みます
        return ItemViewHolder(view)
    }

    override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
        val item = itemList[position]
        holder.titleTextView.text = item.title
        holder.descriptionTextView.text = item.description
        holder.itemView.setOnClickListener { onItemClick(item) }  <--- アイテムをタップしたときの処理
    }

    override fun getItemCount(): Int = itemList.size
}

LoginActivity.kt

package your_package_name

import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import your_package_name.adapter.ItemAdapter
import your_package_name.model.Item

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

        val recyclerView: RecyclerView = findViewById(R.id.recyclerView)
        recyclerView.layoutManager = LinearLayoutManager(this)

        val itemList = listOf(
            Item("タイトル1", "説明1"),
            Item("タイトル2", "説明2"),
            Item("タイトル3", "説明3"),
            Item("タイトル4", "説明4")
        )

        recyclerView.adapter = ItemAdapter(itemList) { item ->
            Toast.makeText(this, "${item.title}がクリックされました", Toast.LENGTH_LONG).show()
        }
    }
}
BACK