如何解决如何从片段中的实时数据对象中清除旧数据
当观察者将数据返回给片段时,我正在加载一个弹出窗口,我的问题,我有按钮可以从数据库中获取数据并将其显示在弹出窗口中,当我第二次执行此操作时,旧数据仍然存在于实时数据中(it 对象)并且多次加载弹出窗口
旧数据不会被清除,直到我们从数据库中获取新数据之前,它会从数据库中的旧数据中多次加载弹出窗口
这是代码
viewModel.proofDetails(id1,id2,id3)
?.observeForever {
var model = it
if (model != null) {
imageList.clear()
val temp = model.mediaURL?.split(",")
if (temp != null) {
imageList = temp!!.toCollection(ArrayList())
}
myAdapter.loadAttachmentPopup(
model.observationNotes,model.mediaURL,model.actionItemId!!,model.auditId!!,model.followUpAuditId!!,true,dialog
)
} else {
imageList.clear()
myAdapter.loadAttachmentPopup(" ","",false,dialog)
}
}
一旦数据加载成功,请帮我清除 it 对象,当它第二次时,应该单独显示新数据并且只显示一次弹出窗口
提前致谢
解决方法
只需实现一个运行良好的现场活动
class SingleLiveEvent<T> : MutableLiveData<T>() {
private val mPending = AtomicBoolean(false)
@MainThread
override fun observe(owner: LifecycleOwner,observer: Observer<T>) {
if (hasActiveObservers()) {
Log.w(TAG,"Multiple observers registered but only one will be notified of changes.")
}
// Observe the internal MutableLiveData
super.observe(owner,object : Observer<T> {
override fun onChanged(t: T?) {
if (mPending.compareAndSet(true,false)) {
observer.onChanged(t)
}
}
})
}
@MainThread
override fun setValue(t: T?) {
mPending.set(true)
super.setValue(t)
}
/**
* Used for cases where T is Void,to make calls cleaner.
*/
@MainThread
fun call() {
setValue(null)
}
companion object {
private val TAG = "SingleLiveEvent"
}
}
private val uploadData = SingleLiveEvent<String>()
fun getUploadData(): SingleLiveEvent<String> {
return uploadData
}
最后请不要使用 ObserveForever 方法来观察你的实时数据,而是使用 Observe 方法,它会工作得很好
viewModel.getUploadData().observe(this,Observer {
//Snackbar
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。