Данные Firestore из RecyclerView на Kotlin
У меня есть список RecyclerView в котором я отображаю все документы (у каждого документа есть своя коллекция с данными) из Firestore, и такой вопрос, как при нажатии на элемент списка отобразить его соответствующие данные в новом фрагменте
ViewModel
class MainViewModel: ViewModel() {
private val db = FirebaseFirestore.getInstance()
private val auth = FirebaseAuth.getInstance()
private val documentsLiveData = MutableLiveData<List<Card>>()
fun getDocuments() {
if (auth.currentUser != null){
db.collection("cards")
.get()
.addOnSuccessListener { documents ->
val cardList = mutableListOf<Card>()
for (document in documents) {
val card = document.toObject(Card::class.java)
cardList.add(card)
}
documentsLiveData.value = cardList
}
.addOnFailureListener { exception ->
Log.e("Document error", exception.message.toString())
}
}
else{
Log.e("Document error", "Toast error")
}
}
fun getDocumentsLiveData(): LiveData<List<Card>> {
return documentsLiveData
}
}
Adapter
class CardAdapter(private val context: Context,
private val list: List<Card>) : RecyclerView.Adapter<CardAdapter.MyViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false)
return MyViewHolder(view)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val item = list[position]
holder.itemView.card_name.text = item.name
holder.itemView.card_description.text = item.description
Glide.with(context)
.load(item.img)
.into(holder.itemView.card_img)
}
override fun getItemCount(): Int {
return list.size
}
class MyViewHolder(view: View) : RecyclerView.ViewHolder(view){
}
}
MainFragment
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel = ViewModelProvider(this)[MainViewModel::class.java]
viewModel.getDocumentsLiveData().observe(viewLifecycleOwner) { cardList ->
binding.progBar.visibility = View.GONE
val adapter = CardAdapter(requireContext(), cardList)
binding.mainRecycler.adapter = adapter
}
viewModel.getDocuments()
}