きっかけ
RecyclerViewを使ってimageのリストを逆順で表示させようとしたときにうまくいかないポイントがあったので書こうと思いました。
Android開発に携わり始めて一ヶ月である手前、寡聞少見ながら本記事を作成しております。
ご意見やアドバイスなどございましたら是非ともよろしくお願いします。
やりたかった事
データをリスト表示させる時、 並びを逆順で(下から)表示させたい
RecyclerViewにしたときに上部から下方向へむけて表示させたい
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2646406%2Fa52691bf-19fc-b6fc-ac01-a7b041dedb6f.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=71e30aa7fb073f6996942ecbe84d619e)
ためしたこと
1. GridLayoutManagerを使って並べ替える
kotlin
//Adapter
//リサイクラービューのリスト、取得方法,数字はあくまで仮定
val exList = listOf(1, 2, 3, 4, 5, 6, 7)
//~~~
//Fragment
private fun initView() {
binding.apply {
val exList = findViewById<RecyclerView>(R.id.ex_list)
val layoutManager = GridLayoutManager(context, 2, GridLayoutManager.VERTICAL, true)
layoutManager.spanSizeLookup = object: GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
return 1
}
}
exList.layoutManager = layoutManager
exList.adapter = ExAdapter
}
}
画像を7枚表示させるとき、GridLayoutManager
の第四引数でreverseLayout
をtrueにして逆順での表示を試みてみた
結果
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2646406%2F3ca8fad5-a29b-203e-9394-ddcf0b62f5b6.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=6676198df2da43f15e784f9f198dbd92)
逆順で表示はされたものの下部から上方向への表示となってしまった(この場合スクロールビューも下からの表示となってしまう)。
類似のものでlayoutManager.reverseLayout = true
も試してみたが結果は変わらなかった。そりゃそうか
kotlin
//Adapter
//リサイクラービューのリスト、取得方法,数字はあくまで仮定
val exList = listOf(1, 2, 3, 4, 5, 6, 7)
//~~~
//Fragment
private fun initView() {
binding.apply {
val exList = findViewById<RecyclerView>(R.id.ex_list)
val layoutManager = GridLayoutManager(context, 2, GridLayoutManager.VERTICAL, false)
layoutManager.reverseLayout = true //ここで逆順にしてみる
layoutManager.spanSizeLookup = object: GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
return 1
}
}
exList.layoutManager = layoutManager
exList.adapter = ExAdapter
}
}
最終的にどう対処したか
→Listのdataそのものを「.reversed()
」で並び替えた
kotlin
val exList = listOf(1, 2, 3, 4, 5, 6, 7).reversed()
色々と回りくどく考えてたがこれで「今まで何してたんだよ」ってくらい一発解決した
わかったこと
-
reverseLayout
でやるとRecyclerViewそのものが反転してしまう - RecyclerViewの向きをそのままにリストの順を逆にするにはリストデータそのものを
.reversed()
するのが楽