Android: Set parent when inflating RecyclerView.ViewHolders

This makes sure view holders get proper widths when they use
layout_width="match_parent". This becomes quite noticeable for
AdvancedMappingControlAdapter in the next commit, but I'm also
making the change for other adapters while I'm at it.
This commit is contained in:
JosJuice
2025-05-17 09:33:57 +02:00
parent cf7b141eb9
commit 0dd601577d
5 changed files with 23 additions and 31 deletions

View File

@ -37,7 +37,8 @@ class GameAdapter : RecyclerView.Adapter<GameViewHolder>(),
* @return The created ViewHolder with references to all the child view's members. * @return The created ViewHolder with references to all the child view's members.
*/ */
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GameViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GameViewHolder {
val binding = CardGameBinding.inflate(LayoutInflater.from(parent.context)) val inflater = LayoutInflater.from(parent.context)
val binding = CardGameBinding.inflate(inflater, parent, false)
binding.root.apply { binding.root.apply {
setOnClickListener(this@GameAdapter) setOnClickListener(this@GameAdapter)
setOnLongClickListener(this@GameAdapter) setOnLongClickListener(this@GameAdapter)

View File

@ -43,17 +43,17 @@ class CheatsAdapter(
val inflater = LayoutInflater.from(parent.context) val inflater = LayoutInflater.from(parent.context)
return when (viewType) { return when (viewType) {
CheatItem.TYPE_CHEAT -> { CheatItem.TYPE_CHEAT -> {
val listItemCheatBinding = ListItemCheatBinding.inflate(inflater) val listItemCheatBinding = ListItemCheatBinding.inflate(inflater, parent, false)
addViewListeners(listItemCheatBinding.getRoot()) addViewListeners(listItemCheatBinding.getRoot())
CheatViewHolder(listItemCheatBinding) CheatViewHolder(listItemCheatBinding)
} }
CheatItem.TYPE_HEADER -> { CheatItem.TYPE_HEADER -> {
val listItemHeaderBinding = ListItemHeaderBinding.inflate(inflater) val listItemHeaderBinding = ListItemHeaderBinding.inflate(inflater, parent, false)
addViewListeners(listItemHeaderBinding.root) addViewListeners(listItemHeaderBinding.root)
HeaderViewHolder(listItemHeaderBinding) HeaderViewHolder(listItemHeaderBinding)
} }
CheatItem.TYPE_ACTION -> { CheatItem.TYPE_ACTION -> {
val listItemSubmenuBinding = ListItemSubmenuBinding.inflate(inflater) val listItemSubmenuBinding = ListItemSubmenuBinding.inflate(inflater, parent, false)
addViewListeners(listItemSubmenuBinding.root) addViewListeners(listItemSubmenuBinding.root)
ActionViewHolder(listItemSubmenuBinding) ActionViewHolder(listItemSubmenuBinding)
} }

View File

@ -23,7 +23,7 @@ class AdvancedMappingControlAdapter(
viewType: Int viewType: Int
): AdvancedMappingControlViewHolder { ): AdvancedMappingControlViewHolder {
val inflater = LayoutInflater.from(parent.context) val inflater = LayoutInflater.from(parent.context)
val binding = ListItemAdvancedMappingControlBinding.inflate(inflater) val binding = ListItemAdvancedMappingControlBinding.inflate(inflater, parent, false)
return AdvancedMappingControlViewHolder(binding, parentLifecycle, isInput, onClickCallback) return AdvancedMappingControlViewHolder(binding, parentLifecycle, isInput, onClickCallback)
} }

View File

@ -32,7 +32,7 @@ class RiivolutionAdapter(private val context: Context, private val patches: Riiv
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RiivolutionViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RiivolutionViewHolder {
val inflater = LayoutInflater.from(parent.context) val inflater = LayoutInflater.from(parent.context)
val binding = ListItemRiivolutionBinding.inflate(inflater) val binding = ListItemRiivolutionBinding.inflate(inflater, parent, false)
return RiivolutionViewHolder(binding.root, binding) return RiivolutionViewHolder(binding.root, binding)
} }

View File

@ -68,57 +68,48 @@ class SettingsAdapter(
val inflater = LayoutInflater.from(parent.context) val inflater = LayoutInflater.from(parent.context)
return when (viewType) { return when (viewType) {
SettingsItem.TYPE_HEADER -> HeaderViewHolder( SettingsItem.TYPE_HEADER -> HeaderViewHolder(
ListItemHeaderBinding.inflate(inflater), ListItemHeaderBinding.inflate(inflater, parent, false),
this this
) )
SettingsItem.TYPE_SWITCH -> SwitchSettingViewHolder( SettingsItem.TYPE_SWITCH -> SwitchSettingViewHolder(
ListItemSettingSwitchBinding.inflate(inflater), ListItemSettingSwitchBinding.inflate(inflater, parent, false),
this this
) )
SettingsItem.TYPE_STRING_SINGLE_CHOICE, SettingsItem.TYPE_STRING_SINGLE_CHOICE,
SettingsItem.TYPE_SINGLE_CHOICE_DYNAMIC_DESCRIPTIONS, SettingsItem.TYPE_SINGLE_CHOICE_DYNAMIC_DESCRIPTIONS,
SettingsItem.TYPE_SINGLE_CHOICE -> SingleChoiceViewHolder( SettingsItem.TYPE_SINGLE_CHOICE -> SingleChoiceViewHolder(
ListItemSettingBinding.inflate(inflater), ListItemSettingBinding.inflate(inflater, parent, false),
this this
) )
SettingsItem.TYPE_SLIDER -> SliderViewHolder( SettingsItem.TYPE_SLIDER -> SliderViewHolder(
ListItemSettingBinding.inflate( ListItemSettingBinding.inflate(inflater, parent, false),
inflater this,
), this, context context
) )
SettingsItem.TYPE_SUBMENU -> SubmenuViewHolder( SettingsItem.TYPE_SUBMENU -> SubmenuViewHolder(
ListItemSubmenuBinding.inflate( ListItemSubmenuBinding.inflate(inflater, parent, false),
inflater this
), this
) )
SettingsItem.TYPE_INPUT_MAPPING_CONTROL -> InputMappingControlSettingViewHolder( SettingsItem.TYPE_INPUT_MAPPING_CONTROL -> InputMappingControlSettingViewHolder(
ListItemMappingBinding.inflate(inflater), ListItemMappingBinding.inflate(inflater, parent, false),
this this
) )
SettingsItem.TYPE_FILE_PICKER -> FilePickerViewHolder( SettingsItem.TYPE_FILE_PICKER -> FilePickerViewHolder(
ListItemSettingBinding.inflate( ListItemSettingBinding.inflate(inflater, parent, false),
inflater this
), this
) )
SettingsItem.TYPE_RUN_RUNNABLE -> RunRunnableViewHolder( SettingsItem.TYPE_RUN_RUNNABLE -> RunRunnableViewHolder(
ListItemSettingBinding.inflate( ListItemSettingBinding.inflate(inflater, parent, false),
inflater this, context
), this, context
) )
SettingsItem.TYPE_STRING -> InputStringSettingViewHolder( SettingsItem.TYPE_STRING -> InputStringSettingViewHolder(
ListItemSettingBinding.inflate( ListItemSettingBinding.inflate(inflater, parent, false), this
inflater
), this
) )
SettingsItem.TYPE_HYPERLINK_HEADER -> HeaderHyperLinkViewHolder( SettingsItem.TYPE_HYPERLINK_HEADER -> HeaderHyperLinkViewHolder(
ListItemHeaderBinding.inflate( ListItemHeaderBinding.inflate(inflater, parent, false), this
inflater
), this
) )
SettingsItem.TYPE_DATETIME_CHOICE -> DateTimeSettingViewHolder( SettingsItem.TYPE_DATETIME_CHOICE -> DateTimeSettingViewHolder(
ListItemSettingBinding.inflate( ListItemSettingBinding.inflate(inflater, parent, false), this
inflater
), this
) )
else -> throw IllegalArgumentException("Invalid view type: $viewType") else -> throw IllegalArgumentException("Invalid view type: $viewType")
} }