Как при клике на категорию(CardView) в RecyclerView сформированную из Firebase вывести в Fragment обновленные данные
Пытаюсь при клике на категорию переназначить данные(из Firebase Reference), которые забираются по определенному адресу из базы. При нажатии на категорию пицца - должны подгружаться только ноды из папки со списком пиццы. Пытался сделать переменную, которая будет менять директорию. Не получилось. Получить статично данные любой категории могу(написать в коде путь), нужно реализовать переключение в приложении, не могу понять как.

Фрагмент активной категории, там где ".getReference("$NODE_CATEGORIES/$category/${category}_list")" - задано статическое значение для пиццы.
open class ActiveCategoryFragment : HomeFragment() {
lateinit var foodRV: RecyclerView
private var _binding: FragmentActiveCategoryBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentActiveCategoryBinding.inflate(inflater, container, false)
val root: View = binding.root
binding.apply {
foodRV = mainFoodScroll
foodRV.layoutManager = GridLayoutManager(context, 2)
foodArrayList = arrayListOf<FoodData>()
onClick(CategoryData())
}
return root
}
private fun getFoodData() {
pca_base = FirebaseDatabase.getInstance().reference.child(NODE_CATEGORIES).child(ACTIVE_CATEGORY).child(ACTIVE_CATEGORY + "_list")
pca_base.addValueEventListener(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
foodArrayList.clear()
if (snapshot.exists()) {
for (foodSnapsot in snapshot.children) {
val food = foodSnapsot.getValue(FoodData::class.java)
foodArrayList.add(food!!) //food?.let { foodArrayList.add(it) }
}
foodRV.adapter = FoodAdapter(foodArrayList, context!!)
}
}
override fun onCancelled(error: DatabaseError) {
TODO("Not yet implemented")
}
})
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun onClick(category: CategoryData) {
getFoodData()
super.onClick(category)
}
companion object {
@JvmStatic
fun newInstance() = ActiveCategoryFragment()
}
}
Адаптер и холдер:
class CategoryAdapter(
val listener: c_Listener,
private val categoryList: ArrayList<CategoryData>) :
RecyclerView.Adapter<CategoryAdapter.CategoryHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CategoryHolder {
val categoryItemView = LayoutInflater.from(parent.context)
.inflate(R.layout.menu_food_category_item, parent, false)
return CategoryHolder(categoryItemView)
}
override fun onBindViewHolder(holder: CategoryHolder, position: Int) {
val currentItem = categoryList[position]
holder.binding.categoryFoodText.text = currentItem.categoryTitle + "\u0020"
holder.binding.categoryFoodBuffer.text = currentItem.categoryName
//Подгрузка картинки элемента.
Glide.with(holder.binding.categoryFoodImg.context)
.load(currentItem.categoryImageLink)
.placeholder(R.drawable.fimage_pizza)
.error(R.drawable.favorite_star)
.into(holder.binding.categoryFoodImg)
holder.bind(categoryList[position], listener)
}
override fun getItemCount(): Int {
return categoryList.size
}
class CategoryHolder(categoryItem: View) : RecyclerView.ViewHolder(categoryItem) {
val binding = MenuFoodCategoryItemBinding.bind(categoryItem)
fun bind(categoryItem: CategoryData, listener: c_Listener) = with(binding)
{
foodCategoryItemCard.setOnClickListener() {
listener.onClick(categoryItem)
}
}
}
interface c_Listener {
fun onClick(category: CategoryData)
}
}
Фрагмент категории и холдер еды на всякий случай:
open class HomeFragment : Fragment(), c_Listener {
private var _binding: FragmentHomeBinding? = null
lateinit var pca_base: DatabaseReference
lateinit var categoryRV: RecyclerView
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentHomeBinding.inflate(inflater, container, false)
val root: View = binding.root
openSubFragment(ActiveCategoryFragment(), R.id.main_food_menu)
binding.apply {
categoryRV = categoryScroller
categoryRV.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
categoryArrayList = arrayListOf<CategoryData>()
getCategoryData()
}
return root
}
private fun getCategoryData() {
pca_base = FirebaseDatabase.getInstance().getReference(NODE_CATEGORIES)
pca_base.addValueEventListener(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
categoryArrayList.clear()
if (snapshot.exists()) {
for (categorySnapsot in snapshot.children) {
val category = categorySnapsot.getValue(CategoryData::class.java)
categoryArrayList.add(category!!)
}
categoryRV.adapter = CategoryAdapter(this@HomeFragment, categoryArrayList)
// categoryRV.adapter = activity?.let { CategoryAdapter(categoryArrayList, it) }
}
}
override fun onCancelled(error: DatabaseError) {
TODO("Not yet implemented")
}
})
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun openSubFragment(whatFragment: Fragment, whereToHold: Int) {
activity!!.supportFragmentManager.beginTransaction()
.replace(whereToHold, whatFragment, "findFragment")
.addToBackStack(null)
.commit()
}
companion object {
@JvmStatic
fun newInstance() = HomeFragment()
}
override fun onClick(category: CategoryData) {
when (category.categoryName) {
"01_breakfast" -> ACTIVE_CATEGORY = BREAKFAST
"02_pizza" -> ACTIVE_CATEGORY = PIZZA
"03_focaccia" -> ACTIVE_CATEGORY = FOCACCIA
"04_lunch" -> ACTIVE_CATEGORY = LUNCH
"05_pasta" -> ACTIVE_CATEGORY = PASTA
"06_hot_snacks" -> ACTIVE_CATEGORY = HOT_SNACKS
"07_salad" -> ACTIVE_CATEGORY = SALAD
"08_raviolli" -> ACTIVE_CATEGORY = RAVIOLLI
"09_hot_meal" -> ACTIVE_CATEGORY = HOT_MEAL
"10_ice_cream" -> ACTIVE_CATEGORY = ICE_CREAM
"11_milkshakes" -> ACTIVE_CATEGORY = MILKSHAKE
"12_hot_drinks" -> ACTIVE_CATEGORY = HOT_DRINKS
"13_cold_drinks" -> ACTIVE_CATEGORY = COLD_DRINKS
"14_freezing" -> ACTIVE_CATEGORY = COLD_DRINKS
else -> ACTIVE_CATEGORY = PIZZA
}
pca_base = FirebaseDatabase.getInstance().reference
pca_base.child(ACTIVE).setValue(ACTIVE_CATEGORY).addOnSuccessListener {
}.addOnFailureListener()
{
Toast.makeText(context,"Сохранение в говне!",Toast.LENGTH_SHORT).show()
}
//Toast.makeText(context, ACTIVE_CATEGORY, Toast.LENGTH_SHORT).show()
}
}
class FoodAdapter(private val foodList: ArrayList<FoodData>, context: Context) :
RecyclerView.Adapter<FoodAdapter.FoodHolder>() {
private var contextFood = context
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FoodHolder {
val foodItemView = LayoutInflater.from(parent.context)
.inflate(R.layout.menu_food_item, parent, false)
return FoodHolder(foodItemView)
}
override fun onBindViewHolder(holder: FoodHolder, position: Int) {
val currentItem = foodList[position]
holder.binding.foodItemTitle.text = currentItem.foodName + "\u0020"
holder.binding.foodItemMass.text ="\u0020" + currentItem.foodMass + " грамм\u0020"
holder.binding.foodItemPrice.text = "\u0020"+ currentItem.foodPrice + "₽\u0020"
holder.binding.foodItemPrice.text = "\u0020"+ currentItem.foodPrice + "₽\u0020"
holder.binding.foodItemPrice.text = "\u0020"+ currentItem.foodPrice + "₽\u0020"
//Подгрузка картинки элемента.
Glide.with(holder.binding.foodItemImg.context)
.load(currentItem.foodImageLink)
.placeholder(R.drawable.bg_pizza_steam)
.error(R.drawable.bg_pizza_steam)
.into(holder.binding.foodItemImg)
holder.bind(currentItem,contextFood)
}
override fun getItemCount(): Int {
return foodList.size
}
class FoodHolder(foodItem: View): RecyclerView.ViewHolder(foodItem) {
val binding = MenuFoodItemBinding.bind(foodItem)
fun bind(foodItem: FoodData, context: Context) = with(binding)
{
foodItemCard.setOnClickListener(){
Toast.makeText(context,"Нажато: ${foodItemTitle.text}", Toast.LENGTH_SHORT).show()
}
foodItemCard.setOnClickListener(){
val intent_to_food_details = Intent(context, FoodItemDetailsFragment::class.java).apply {
putExtra("title",foodItemTitle.text.toString())//TODO
putExtra("price",foodItemPrice.text.toString())
putExtra("mass",foodItemMass.text.toString())
putExtra("mass",foodItemMass.text.toString())
putExtra("mass",foodItemMass.text.toString())
putExtra("mass",foodItemMass.text.toString())
}
context.startActivity(intent_to_food_details)
}
}
}
}