- InboxViewHolder class
package com.example.whatsappclone.Models
import android.view.View
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import com.example.whatsappclone.R
import com.example.whatsappclone.Utils.formatAsListItem
import com.example.whatsappclone.Utils.formatAsTime
import com.squareup.picasso.Picasso
import kotlinx.android.synthetic.main.list_item.view.*
class InboxViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView) {
fun bind(item : Inbox , onClick : (name : String , photo : String , id : String) -> Unit){
with(itemView){
if(item.count > 0 ){
itemCountMsg.isVisible = true
itemCountMsg.text = item.count.toString()
}
itemTime.text = item.time.formatAsListItem(context)
itemName.text = item.name
itemStatus.text = item.msg
Picasso.get()
.load(item.image)
.placeholder(R.drawable.defaultavatar)
.error(R.drawable.defaultavatar)
.into(itemIv)
setOnClickListener {
onClick.invoke(item.name , item.image , item.from)
}
}
}
}
2)InboxFragment
package com.example.whatsappclone.fragment
import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.whatsappclone.*
import com.example.whatsappclone.Models.Inbox
import com.example.whatsappclone.Models.InboxViewHolder
import com.firebase.ui.database.FirebaseRecyclerAdapter
import com.firebase.ui.database.FirebaseRecyclerOptions
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.FirebaseDatabase
import com.google.firebase.database.Query
import kotlinx.android.synthetic.main.fragments_chats.*
class InboxFragment : Fragment() {
lateinit var mAdapter : FirebaseRecyclerAdapter<Inbox, InboxViewHolder>
lateinit var viewManager: RecyclerView.LayoutManager
private val mDatabase by lazy {
FirebaseDatabase.getInstance()
}
private val auth by lazy {
FirebaseAuth.getInstance()
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
viewManager = LinearLayoutManager(requireContext())
setUpAdapter()
return inflater.inflate(R.layout.fragments_chats , container , false)
}
private fun setUpAdapter() {
val baseQuery : Query = mDatabase.reference.child("chats").child(auth.uid!!)
val options = FirebaseRecyclerOptions.Builder<Inbox>()
.setLifecycleOwner(viewLifecycleOwner)
.setQuery(baseQuery , Inbox::class.java)
.build()
mAdapter = object : FirebaseRecyclerAdapter<Inbox , InboxViewHolder>(options){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): InboxViewHolder {
val itemView = layoutInflater.inflate(R.layout.list_item , parent , false)
return InboxViewHolder(itemView)
}
override fun onBindViewHolder(holder: InboxViewHolder, position: Int, model: Inbox) {
holder.bind(item = model){ name : String , photo : String , id : String ->
val intent = Intent(requireContext() , ChatActivity::class.java)
intent.putExtra(ID , id)
intent.putExtra(NAME , name)
intent.putExtra(PHOTO , photo)
startActivity(intent)
}
}
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
recyclerView.apply {
setHasFixedSize(true)
adapter = mAdapter
layoutManager = viewManager
}
}
}