【1】リソース画像を列挙。(一般サンプル通りでOK)
【2】画像ファイルを縮小(サムネイル化)して列挙。
【2】のポイント。
[1]処理速度。
[2]容量。
[1-1]サムネイル画像ファイルを作成し、2回目以降はそれを読み込む。
[1-2]サムネイル画像ファイルの作成はワーカースレッドで実行する。
[1-3]サムネイル画像ファイルが未作成の時はリソース画像を設定。作成後入れ替える(更新)。
[2-1]サムネイル画像ファイルの保存場所。
[2-2]サムネイルのサイズと保存容量。
[2-3]サムネイル画像ファイルの総数。
[1-1-1]サムネイル画像ファイルの保存場所のファイル有無で処理を分岐する。
[1-2-1]ExecutorService().submit(new Runnable())
[1-3-1]RecyclerView.getAdapter().notifyItemChanged(viewID)
[2-1-1]getCacheDir() + absoluteFilePath
[2-2-1]160x160ドット、10Kbyte程度。JPG
[2-3-1]CacheDirならシステムで一括消去が有る。
【注意点】
・RecyclerViewは任意の時点で更新される。(可能性がある)
・RecyclerView.setAdaptr()でアイテムが更新される。(可能性がある)
・RecyclerViewが更新されてもワーカースレッドは独立進行する。
なので、現在のRecyclerViewの内容がワーカースレッドへ処理発注した時点のRecyclerViewの内容と同じならばImageViewを更新させる。
RecyclerViewの内容が変更されているのに発注した時点の条件で更新すると例外で停止する。
・現在のRecyclerView.getAdapter()オブジェクトとワーカースレッド引数のRecyclerView.getAdapter()オブジェクトを調べる。
・ワーカースレッドへ処理発注時にMyRecyclerViewでRecyclerView_idを渡す。そのIDが現在のRecyclerView_idと同じかを調べる。
IDはViewModelで管理してRecyclerViewの変更、更新があったらIDを進める。
今、RecyclerViewアダプターのオブジェクト比較で同じならnotifyItemChanged(viewID)で更新している。
ViewModelで一元管理するのであれば、RecyclerViewに関する更新が行われた時にnotifyItemChanged(viewID)が実行されない工夫が必要。
・継承MyRecyclerViewにRecyclerView_idを設置。
・ViewModelのLiveDataにRecyclerViewを使う。そして、RecyclerView_idを設置。
継承クラスかViewModelか、試して使い勝手の良い方を選択する。
やっぱり、一元管理かな。