0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Android】ListAdapterの基本テンプレート

Posted at

はじめに

RecyclerViewを使用したリスト形式のUIを実装するケース非常に多いですよね。
都度調べて実装しているとコストがかかるので、サッとコピペしてすぐ使えるテンプレートを残しておこうと思います。

テンプレート内容

実装は以下です。

TemplateListAdapter.kotlin
class TemplateListAdapter(
    private val viewLifecycleOwner: LifecycleOwner,
    private val onClickItem: (Unit) -> Unit
) : ListAdapter<Unit, TemplateListAdapter.TemplateListItemViewHolder>(ListCallback) {

    private object ListCallback : DiffUtil.ItemCallback<Unit>() {
        override fun areItemsTheSame(
            oldItem: Unit,
            newItem: Unit
        ): Boolean {
            return oldItem == newItem
        }

        override fun areContentsTheSame(
            oldItem: Unit,
            newItem: Unit
        ): Boolean {
            return oldItem == newItem
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TemplateListItemViewHolder {
        val layoutInflater = LayoutInflater.from(parent.context)
        return TemplateListItemViewHolder(
            binding = ItemTemplateBinding.inflate(layoutInflater, parent, false),
            onClickItem = onClickItem
        )
    }

    override fun onBindViewHolder(holder: TemplateListItemViewHolder, position: Int) {
        holder.bind(
            viewLifecycleOwner = viewLifecycleOwner,
            item = getItem(position)
        )
    }

    class TemplateListItemViewHolder(
        private val binding: ItemTemplateBinding,
        private val onClickItem: (Unit) -> Unit
    ) : RecyclerView.ViewHolder(binding.root) {
        fun bind(
            viewLifecycleOwner: LifecycleOwner,
            item: Unit
        ) {
            binding.run {
                lifecycleOwner = viewLifecycleOwner
                this.item = item
                setOnClickItem {
                    onClickItem(item)
                }
                executePendingBindings()
            }
        }
    }
}
item_template.xml
<layout xmlns:android="http://schemas.android.com/apk/res/android" >

    <data>
        <variable
            name="onClickItem"
            type="View.OnClickListener" />

        <variable
            name="item"
            type="Unit" />

        <import type="android.view.View" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

以上になります。
基本的に各種型の設定はUnitになっているので、必要に応じて修正してください。
また、areItemsTheSameの比較条件なども同様です、idを比較するなど都度適した形へ調整して使っていただければと思います。

さいごに

プロジェクト内のリソースをコピーして使うのもいいですが、新規のケースなどはこういったテンプレートがあると便利ですね。
是非ご活用いただければと思います。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?