Как при клике на категорию(CardView) в RecyclerView сформированную из Firebase вывести в Fragment обновленные данные

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

Фрагмент активной категории, там где ".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)
        }
    }
}

}


Ответы (0 шт):