Razl-Dazl

eyecatch
Copyright © Google

RecyclerViewにLinearLayoutManagerを適用した際にViewの幅がおかしくなる件

Posted at — 2023-06-19

RecyclerViewのレイアウトが崩れる場合、大抵はレイアウトファイルに不備があるのですが、今回に限ってはロジック側に問題がありました

↓本来であればこんな風に表示してほしいのに

↓こんな感じで崩れてしまう・・・

正常に動いているコードと1つ1つ比較してみた所、Adapterクラスでinflateする際の引数が足りていませんでした・・・

(修正前)

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {  
    val inflater = LayoutInflater.from(context)  
    val binding = RowTagBinding.inflate(inflater)  
    return ViewHolder(binding)  
}

(修正後)

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {  
    val inflater = LayoutInflater.from(context)  
    val binding = RowTagBinding.inflate(inflater, parent, false)  // ここ
    return ViewHolder(binding)  
}

1つ気になるのは、他のLayoutManagerを使用した際は特に問題なく、LinearLayoutManagerを使用した際にだけ表示崩れが起きること・・・

ここを修正せずにLayoutManagerをGridLayoutManager(context, 1)と書き換えても、表示崩れが直るんですよね・・・暫くはそれで代用してました

ListViewからRecyclerViewに移行する時とかってレイアウトファイルの不備でおかしくなりがちなんですけど、関係ない場合もあるよという事で、参考になれば・・・

Author@zakuro

Mastodon: 396@vivaldi.net