月: 2022年1月

時間をかけずにRecyclerViewにアニメーションをつける

下記ライブラリを使用します

https://github.com/wasabeef/recyclerview-animators

アニメーションを付けたいRecyclerViewが属するモジュールのbuild.gradleに下記を追加します。

dependencies {
  implementation 'jp.wasabeef:recyclerview-animators:[version]'
}

トップレベルのbuild.gradleにgoogle()とmavenCentral()を追加しSync Project with Gradle Filesを実行します。

buildscript {
  repositories {
    google()
    mavenCentral()
  }
}

RecyclerViewのitemAnimatorにアニメーションを設定します。

recyclerView.itemAnimator = SlideInLeftAnimator()

notifyItem****でRecyclerViewのアイテムを更新するとアニメーションが付きます。

RecyclerView.Adapterにアニメーションを付けたい場合は下記のようにします。

recyclerView.adapter = AlphaInAnimationAdapter(MyAdapter())

RecylclerViewをスクロールするとアニメーションが付きます。

独自で書く方法もありますが調べたりメンテするのも面倒なので、とにかく時間をかけずにRecyclerViewにアニメーションを付けたい場合はこの方法がおすすめです。ライブラリが2015年から開発されておりスター10000超えなので安泰ですね。


DaggerからHiltへの移行調査

参考

Hiltが安定版になり半年ほどが経ちました。試しにDaggerからHiltにマイグレーションしてみたところ、アプリケーションコードは割と簡単に移行できますが、モジュール毎など分割してマイグレーションするのがかなり難しく、一度にアプリ全体をHiltに書き換えるため、作業負担は大きいと思います。

さらにテストコードはそのままでは動かないので試行錯誤しました。HiltでFragmentのテストをする場合はDaggerで使用していたlaunchInContainerがHiltのテストに対応していないため、launchInHiltContainerを用意し、Fragmentを動かすための空のActivityも用意しないといけないため面倒です。

Hiltに関係したJetpackについても2022年1月時点ではalpha版であるため、Hiltにスムーズに移行できる体制はまだ整っていないと言えます。(androidx.hilt:hilt-lifecycle-viewmodelとandroidx.hilt:hilt-compiler)

Googleが公開しているAndroid Blueprintsのdev-hiltブランチではFragmentのテストは仮想または実機デバイスを必要としており、今まではJVM上でFragmentのユニットテストが可能でしたが、どちらかというとインテグレーションテストに近い意味合いのテストになっています。

テスト箇所Dagger使用時Hilt使用時
ViewModelユニットテストユニットテスト
Fragmentニットテストまたはインテグレーションテストインテグレーションテスト
単一Activity(複数Fragment)インテグレーションテストまたはUIテストインテグレーションテストまたはUIテスト
複数Activityやアプリ全体インテグレーションテストまたはUIテストインテグレーションテストまたはUIテスト

また今までFragmentやViewModelをテストする場合はモックやスタブしてテストしていましたが、HiltではFakeモジュールを作成し、本番モジュールと入れ替えてテストすることが基本となり、そういった部分でも移行コストが結構あると思います。

  • HiltのJetpackがまだalpha版(2022年1月時点)
  • Fragmentのユニットテストが書きにくい(launchInHiltContainerとActivityの用意)
  • 移行コストがそこそこあり、テストの移行が簡単ではない

以上3点より、Hilt移行はまだいいかなと思います。