Android Kotlin基礎講座 07.5:RecyclerViewのヘッダー

Android Kotlin基礎講座

タスク:リスト操作にコルーチンを使う

このアプリには修正すべき点が2つあります。一つは見える部分で、もう一つは内部の見えない部分です。

  • ヘッダーが左上の角に表示されていますが、それだと区別がしづらいです。
  • 一つしかヘッダーがない小さなリストであれば、それはさほど問題ではありませんが、それとは別にUIスレッド上でaddHeaderAndSubmitList()によるリスト操作を行うべきではありません。100以上のアイテムがあり、複数のヘッダーを持ち、どこにアイテムが挿入されるべきかを決めるロジックをもつリストを想像してみてください。この処理はコルーチンに属します。

addHeaderAndSubmitList()をコルーチンを使うように変更します。

  1. SleepNightAdapterクラス内のトップレベルで、Dispatchers.Defaultを用いてCoroutineScopeを定義してください。
private val adapterScope = CoroutineScope(Dispatchers.Default)
  1. addHeaderAndSubmitList()内で、リストを操作するためにadapterScope内でコルーチンを起動してください。その後、リストをサブミットするためにDispatchers.Mainに切り替えます。以下のようになります。
fun addHeaderAndSubmitList(list: List<SleepNight>?) {
        adapterScope.launch {
            val items = when (list) {
                null -> listOf(DataItem.Header)
                else -> listOf(DataItem.Header) + list.map { DataItem.SleepNightItem(it) }
            }
            withContext(Dispatchers.Main) {
                submitList(items)
            }
        }
    }
  1. コードはエラーなくビルドできるはずです。一見アプリに違いは見られません。

プロフィール

プロフィール
コードラボJP

大学卒業後SEに就職、現在は退職しフリーランスとして活動中。
『初心者でも挫折せずに一人でプログラミングを学べる』をモットーに、コードラボJPを開設
お問い合わせ等はcodelabsjp@gmail.comまで

コードラボJPをフォローする
タイトルとURLをコピーしました