7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RecyclerViewを使ったリストの逆順表示をしたかった

Posted at

きっかけ

RecyclerViewを使ってimageのリストを逆順で表示させようとしたときにうまくいかないポイントがあったので書こうと思いました。

Android開発に携わり始めて一ヶ月である手前、寡聞少見ながら本記事を作成しております。
ご意見やアドバイスなどございましたら是非ともよろしくお願いします。

やりたかった事

  • データをリスト表示させる時、 並びを逆順で(下から)表示させたい
  • RecyclerViewにしたときに上部から下方向へむけて表示させたい

ためしたこと

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にして逆順での表示を試みてみた

結果

逆順で表示はされたものの下部から上方向への表示となってしまった(この場合スクロールビューも下からの表示となってしまう)。

類似のもので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()するのが楽
7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?