【发布时间】:2023-03-03 11:07:01
【问题描述】:
我正在尝试通过视图模型从存储库中观察我的片段中包含在 LiveData 中的布尔值,尽管我成功地能够在存储库中更改它的值我无法在片段中观察到它在片段中没有改变.
我的代码
存储库
private val postUploaded: MutableLiveData<Boolean> = MutableLiveData()
postId.let { it ->
FirebaseFirestore.getInstance().collection("Posts").document(it).set(postMap,
SetOptions.merge())
.addOnSuccessListener {
postUploaded.value=true
}
}
@JvmName("getPostUploaded")
fun getPostUploaded(): MutableLiveData<Boolean> {
return postUploaded
}
视图模型
class UploadFragmentViewModel(application: Application) :AndroidViewModel(application) {
private val authAppRepository: Repository = Repository(application)
private val postUploaded: MutableLiveData<Boolean> = authAppRepository.getPostUploaded()
@JvmName("getPostUploaded")
fun getPostUploaded(): MutableLiveData<Boolean> {
return postUploaded
}
}
片段
mViewModel = ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory
.getInstance(Application())).get(UploadFragmentViewModel::class.java)
mViewModel.getPostUploaded().observe(viewLifecycleOwner, {
Log.d("MyTag", "it in upload fragment is $it")
if (it){
binding.lottieanim2.visibility=View.VISIBLE
Handler(Looper.getMainLooper()).postDelayed({
run {
val fragment: Fragment = HomeFragment()
activity!!
.supportFragmentManager
.beginTransaction()
.replace(R.id.container, fragment)
.commit()
}
}, 2000);
}
})
【问题讨论】:
-
您如何验证 MutableLiveData 的值实际上在您的存储库中发生了变化?也许在 onSuccessListener 中放置一个断点以确保它实际上是成功的。顺便说一句,如果用户在 2 秒延迟期间退出片段或旋转屏幕,您在片段中的
postDelayed()调用将触发崩溃,因为activity将为空。 -
-
@Tenfour04 它崩溃了好几次我只是在尝试别的东西它现在已经改变了