〈kotlin〉Groupie
Android studioでkotlinを使ってAndroidアプリ作成の勉強中。
RecyclerViewに表示する1つ1つのアイテムのレイアウトを
ViewHolderなしでシンプルに書けるライブラリGroupieを触ってみた。
GroupieはRecyclerViewの中に複数のレイアウトでアイテムを追加していきたいときに便利に使えそう。
Gradle
setting.gradle
dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() maven { url "https://jitpack.io" } //ここを追加 } }
build.gradle
implementation "com.github.lisawray.groupie:groupie:$version" implementation "com.github.lisawray.groupie:groupie-databinding:$version"
基本的にDataBindingと合わせて使うのが良さそうだったので2つ目の依存関係を追加。
レイアウト
RecyclerViewに表示したいアイテム1つ分のレイアウトを作成。
<layout 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"> <data> <variable name="item" type="String" /> </data> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" android:text="@{item}"/> </androidx.constraintlayout.widget.ConstraintLayout> </layout>
BindableItem
GroupieのBindableItemクラスを使用して、後からadapterに渡すデータのクラスを作成する。
class ListItem(val text : String) : BindableItem<SampleListItemBinding>() { override fun bind(viewBinding: ListItemBinding, position: Int) { viewBinding.item = text //itemはxmlでdatabindingに設定した変数 } override fun getLayout(): Int = R.layout.sample_list_item }
adapterを作成してデータを渡す
val adapter = GroupieAdapter() binding.recyclerview.adapter = adapter adapter.add(ListItem("sample1")) val listItems = listOf(ListItem("sample2"), ListItem("sample3")) adapter.update(listItems) val section = Section() section.setHeader(HeaderItem()) section.addAll(listItems) adapter.add(section)
adapterはGroupieAdapter()のインスタンスを用意するだけで良い。
アイテムを追加するときはaddで追加するか、updateで更新するか、Sectionを使って追加する。
Sectionは移動、更新などの差分やアニメーションをサポートしているGroupieリストで、
ヘッダーやフッターを設定することができそう。
参考
groupie/README.md at bc3c799b8cbb08ddf5f450b8f9b62f84aff33a84 · lisawray/groupie · GitHub
Groupie 基本系からドラッグ&ドロップ、スワイプなど - Qiita