はじめに
[CA Tech Dojo/Challenge/JOB Advent Calendar 2019]の2日目はbatchが書かせていただきます.
私は今年の夏にCA Tech Dojo(Kotlin編)に参加させていただきました.めちゃくそ最高のインターンだったので来年も開催される場合は,おすすめです.Dojoはある技術の初心者の導入部分をサポートしてくれるインターンなので,最近気になってる技術をメンターさんに教えてもらいながら学ぶことができます.
詳しくはコチラ
本題
Glideを使って画像をリスト内で表示して,リストのItemがクリックして別の画面に遷移して,遷移先でリストに表示していた画像を使いまわしたいみたいなことはよくあると思います.そこで,Navigationなどつかって遷移先にも画像のURLをStringで渡して表示するということをしても実装できますが,GlideではURLをキーとして画像をキャッシュしてまた,遷移先でおなじキーでキャッシュからデータを取ってこれるやり方があるそう.
なんかわざわざそれしなくてもかってにキャッシュしてくれてそうな感じもしますが,とりあえず明示的にキャッシュしてそれを遷移先で取得するやり方の知見共有したいと思います.
Step1 キャッシュ
以前,Groupieでitemクリックを実装する記事を書きました.
今回はitemがクリックされたときに動かすとはじめにで言ったような動きを実装することができます.Glide.with
のとこでcoverPathをキーとして画像をキャッシュしています.
そして,遷移先で同じキーでキャッシュから取り出したいので,actionに渡してNavigationで遷移しています.
val index = this.playlistAdapter.getAdapterPosition(item)
val coverImage = requireActivity().findViewById<ImageView>(R.id.cover_image_view)
val coverPath = viewModel.playlists.value?.get(index).coverPath ?: return@OnItemClickListener
Glide.with(this)
.load(coverPath)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(coverImage)
val action = PlaylistFragmentDirections.actionMusicFragment()
action.coverPath = coverPath
Navigation.findNavController(requireActivity(), R.id.nav_host_fragment).navigate(action)
Step2 キャッシュから取り出す
遷移先の画面では,わたされてきたcovetPathをsafeargsで受け取ってそれをキーとしてキャッシュから画像を表示させています.
val coverImageView = view.findViewById<ImageView>(R.id.cover_image_view)
val args: MusicFragmentArgs by navArgs()
val coverPath = args.coverPath
Glide.with(this)
.load(coverPath)
.onlyRetrieveFromCache(true)
.into(coverImageView)
参考