Я использую liveata для обмена данными между двумя фрагментами. но данные во втором фрагменте вообще не наблюдаются, поэтому я не могу получить данные.
ViewModel
var selectedAttachment = MutableLiveData<ArrayList<Attachment>>()
private val attachmentList = ArrayList<Attachment>()
private fun getExistingAttachmentPos(key: String): Int{
return attachmentList.indexOfFirst { att -> att.name == key}
}
fun toggleAttachment(attachment: Attachment){
val id = attachment.name
val pos = getExistingAttachmentPos(id)
if(pos == -1 ){
attachmentList.add(attachment);
}else{
attachmentList.removeAt(pos);
}
selectedAttachment.postValue(attachmentList)
}
Вскоре данные в первом фрагменте можно установить и наблюдать
первый фрагмент
private fun observeHorizontalAttachment(){
viewModel.selectedAttachment.observe(viewLifecycleOwner, Observer<ArrayList<Attachment>>{
if(it.size>3){
Log.d("tag63", it.toString())
wrapPlus3.visibility = View.VISIBLE
plus3.text = "+${(it.size - 3).toString()}"
pendingAttachment.clear()
pendingAttachment.addAll(it)
(rvAttachment.adapter as AttachmentAdapter).setDataset(it)
}else{
pendingAttachment.clear()
pendingAttachment.addAll(it)
Log.d("tag3", "kurang dari 3 ${it.size}")
wrapPlus3.visibility = View.GONE
}
})
}
В первом фрагменте данные существуют / наблюдаемы
второй фрагмент
private fun attachmentObserve(){
viewModel.selectedAttachment.observe(viewLifecycleOwner, Observer<ArrayList<Attachment>>{
Log.d("tag6", it.toString())
pendingAttachment.clear()
pendingAttachment.addAll(it)
})
}
private fun handleRvAttachment(){
Log.d("tag61", pendingAttachment.toString())
rvListAttachment.apply {
adapter = ListAttachmentAdapter(pendingAttachment)
layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
}
}
Во втором фрагменте selectedAttachment
вообще не наблюдает (даже 'tag6' не отлаживается), поэтому я не могу получить данные
Спасибо .