我正在使用 View Binding来自 Kotlin Android 扩展:
import kotlinx.android.synthetic.main.fragment_user_profile.*
我想在 fragment 中显示来自 Cloud Firestore 的值:
FirebaseFirestore.getInstance()
.collection("users")
.document("1")
.get()
.addOnSuccessListener { doc ->
my_text_view.text = doc["name"] as String
}
如果在接收到数据时仍显示该 fragment ,则它会起作用。但是,如果用户在接收到数据之前关闭 fragment (按回键),它就会崩溃:
java.lang.IllegalStateException: my_text_view must not be null
如何避免这种情况?
当然我可以使用 my_text_view?.text = ...
但是
有一天我会忘记输入
?
没有解决 fragment 销毁后监听器还活着的问题
我想我想要类似 addOnSuccessListener(Activity, OnSuccessListener)
的东西但对于 Fragment 而不是 Activity
最佳答案
如果 fragment 仍被添加到其宿主 Activity 中,您可以检查回调
FirebaseFirestore.getInstance()
.collection("users")
.document("1")
.get()
.addOnSuccessListener { doc ->
if (isAdded) {
my_text_view.text = doc["name"] as String
}
}
但是,更好的解决方案是将您的业务逻辑移至 View 模型。
关于android - Kotlin View 绑定(bind) java.lang.IllegalStateException : view must not be null inside listener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53510119/