class ChatLogActivity : AppCompatActivity(){
.......
val ref= FirebaseDatabase.getInstance().getReference("/user-messages/$fromId/$toId")
ref.addChildEventListener(object : ChildEventListener{
override fun onChildAdded(p0: DataSnapshot, p1: String?) {
val chatMessage = p0.getValue(ChatMessage::class.java)
if (chatMessage != null) {
if(chatMessage.fromId == FirebaseAuth.getInstance().uid){
adaptor.add(
ChatToItems(
chatMessage
)
)
}
override fun onChildRemoved(p0: DataSnapshot) {
**//Want to update my adapter here when one child is deleted**
}
}
class ChatToItems(val chatMessage: ChatMessage) : Item<ViewHolder>(){
override fun bind(viewHolder: ViewHolder, position: Int) {
viewHolder.itemView.textViewToRow.setOnClickListener {
....
deleteSendMessage(viewHolder,chatMessage.toId,chatMessage.fromId,chatMessage.id,position)
}
**//Deleting from firebase**
private fun deleteSendMessage(
viewHolder: ViewHolder,
toId: String,
fromId: String,
id2: String,
position: Int )
val reference = FirebaseDatabase.getInstance().reference
.child("user-messages").child(fromId)
.child(toId).child(id2).removeValue()
.addOnCompleteListener {task ->
if(task.isSuccessful){
Toast.makeText(viewHolder.itemView.context,"Deleted",Toast.LENGTH_LONG).show()
}
else{
Toast.makeText(viewHolder.itemView.context,"Failed to Delete",Toast.LENGTH_LONG).show()
}
}
You can do adapter.remove(message)
First one when you know which exactly element will remove, my suggestion you have to keep a references of the items are you adding into an adapter.
adapter.removeGroupAtAdapterPosition(positionIndex)
Second one you have to know which position wants to remove, due to it's a chat app keep in mind indexes will mutate
Thanks for providing the answer here @cbedoy