Adapter RecyclerView не видит root
Я изменил макет item xml файла с androidx.constraintlayout.widget.ConstraintLayout на layout, после чего root в FoodItemViewHolder стал выделяться красным:
class FoodItemAdapter(private val context: Context, private val names: List<String>, private val text: List<String>)
: RecyclerView.Adapter<FoodItemAdapter.FoodItemViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FoodItemViewHolder {
val binding = FoodItemLayoutBinding.inflate(LayoutInflater.from(context),parent,false)
return FoodItemViewHolder(binding)
}
override fun onBindViewHolder(holder: FoodItemViewHolder, position: Int) {
val foodItem = names[position]
val foodItem2 = text[position]
holder.bind(foodItem, foodItem2)
}
override fun getItemCount(): Int {
return names.size
}
class FoodItemViewHolder(val foodItemLayoutBinding: FoodItemLayoutBinding)
: RecyclerView.ViewHolder(foodItemLayoutBinding.root){
private val binding = foodItemLayoutBinding
fun bind(foodItem: String, foodItem2: String){
binding.foodItemNameTV.text = foodItem
binding.foodItemPriceTV.text = foodItem2
}
}
}
Ответы (1 шт):
Чтобы DataBinding заработал - надо его явно включить в build.gradle(module app)
android {
...
buildFeatures {
dataBinding true
}
}
Вообще завязываться на гугловые либы, использующие кодогенерацию по XML - плохая идея в том смысле, что часто что-то ломается так, что не выдаёт каких-то понятных ошибок. Как в этом случае, так и в случае либы для навигации (там это пытаются исправить через либу SafeArgs). Даже ViewBinding иногда ломается страшным образом (у меня, например, полпроекта сломалось из-за пустого коммента в разметке так, что студия не подключала стороннюю либу странным образом. Ошибку нашёл методом везения).
ИМХО - лучше не использовать либы от гугла с кодогенерацией по XML.
