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.
*/
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 {
setOnClickListener(this@GameAdapter)
setOnLongClickListener(this@GameAdapter)

View File

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

View File

@ -23,7 +23,7 @@ class AdvancedMappingControlAdapter(
viewType: Int
): AdvancedMappingControlViewHolder {
val inflater = LayoutInflater.from(parent.context)
val binding = ListItemAdvancedMappingControlBinding.inflate(inflater)
val binding = ListItemAdvancedMappingControlBinding.inflate(inflater, parent, false)
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 {
val inflater = LayoutInflater.from(parent.context)
val binding = ListItemRiivolutionBinding.inflate(inflater)
val binding = ListItemRiivolutionBinding.inflate(inflater, parent, false)
return RiivolutionViewHolder(binding.root, binding)
}

View File

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