我正在使用Kotlin Android扩展中的View Binding:
import kotlinx.android.synthetic.main.fragment_user_profile.*
我想在片段中显示Cloud Firestore的值:
FirebaseFirestore.getInstance()
.collection("users")
.document("1")
.get()
.addOnSuccessListener { doc ->
my_text_view.text = doc["name"] as String
}
如果在接收数据时仍显示该片段,则它起作用。但是,如果用户在收到数据之前在 之前关闭片段(按回),它将崩溃:
java.lang.IllegalStateException: my_text_view must not be null
如何避免这种情况?
我当然可以使用my_text_view?.text = ...
,但是
总有一天我会忘记放?
无法解决片段被破坏后侦听器仍然存活的问题
我想我想要类似addOnSuccessListener(Activity, OnSuccessListener)
的东西,但要使用Fragment而不是Activity
答案 0 :(得分:2)
您可以在回调中检入片段是否仍添加到其主机活动中,
FirebaseFirestore.getInstance()
.collection("users")
.document("1")
.get()
.addOnSuccessListener { doc ->
if (isAdded) {
my_text_view.text = doc["name"] as String
}
}
但是,更好的解决方案是将业务逻辑移至视图模型。