0
0

More than 1 year has passed since last update.

RecyclerViewをとりあえず使ってみる【Android】【Kotlin】

Last updated at Posted at 2022-02-02

RecyclerViewの使い方を備忘録として残します

まずRecyclerViewはスケジュールアプリなどで使うようなデータセットを簡単に表示できるクラスでライブラリでもあります。

タスクの表などをリサイクルするので、複数あるタスクがスクロールをし画面の外になってもビューを消去せず画面にスクロールされた新しいタスクを表示し再利用します。

以下を実装します
・activity_main
activity_mainの中にRecyclerViewを実装

・recycler_line.xml
RecyclerViewの1行部のレイアウトを作成

・ViewHolder
recycler_line.xmlの1行分を保持する

・RecyclerView.Adapter
1行分のデータをViewHolderに紐づける

使い方
まずactivity_mainにRecyclerView実装します

activity_main.xml
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recycler_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    </LinearLayout>

タスク1行分のレイアウトを作成

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

        <TextView
            android:id="@+id/text"
            android:text="@string/test1"
            android:textSize="20sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>

1行分のタスクの保持する為にViewHolderを作成

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

//一行分のレイアウトを保持しておくクラス
class ScheduleHolder(item: View) : RecyclerView.ViewHolder(item) {
    //scheduleListはスケジュール
    val scheduleList: TextView = item.findViewById(R.id.text)

1行分のデータをViewHolderに紐づける

ScheduleAdapter.kt
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView

//ScheduleHolderと紐付けるクラス。コンストラクタにListをもらい1行分のレイアウトと紐付ける。
class ScheduleAdapter(val list: List<String>) : RecyclerView.Adapter<ScheduleHolder>() {
    //1行分のレイアウトを生成
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ScheduleHolder {
        val itemView = LayoutInflater.from(parent.context).inflate(R.layout.recycler_line, parent, false)
        return ScheduleHolder(itemView)
    }

    //onBindViewHolderはScheduleHolderを結ぶ。holderは1行分、positionは何行目。
    override fun onBindViewHolder(holder: ScheduleHolder, position: Int) {
        holder.scheduleList.text = list[position]
    }

    //getItemCountは行の数をカウント
    override fun getItemCount(): Int = list.size
}

MainActivityにリストを入れてビュー、アダプタ、LinearLayoutManagerにセットする

MainActivity.kt
class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    private lateinit var recyclerView: RecyclerView

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

        val textList = listOf(
            "aaa",
            "bbb",
            "aaa",
            "bbb",
            "ccc"
        )

        recyclerView = findViewById(R.id.recycler_list)
        recyclerView.adapter = ScheduleAdapter(textList)
        recyclerView.layoutManager = LinearLayoutManager(this)

    }
}

以上を実装すれば簡単ではあるがRecyclerViewでの表示ができると思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0