RecyclerViewの使い方を備忘録として残します
まずRecyclerViewはスケジュールアプリなどで使うようなデータセットを簡単に表示できるクラスでライブラリでもあります。
タスクの表などをリサイクルするので、複数あるタスクがスクロールをし画面の外になってもビューを消去せず画面にスクロールされた新しいタスクを表示し再利用します。
以下を実装します
・activity_main
activity_mainの中にRecyclerViewを実装
・recycler_line.xml
RecyclerViewの1行部のレイアウトを作成
・ViewHolder
recycler_line.xmlの1行分を保持する
・RecyclerView.Adapter
1行分のデータをViewHolderに紐づける
使い方
まずactivity_mainにRecyclerView実装します
<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行分のレイアウトを作成
<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を作成
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に紐づける
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にセットする
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での表示ができると思います。