我正在使用Kotlin Android Extensions:的视图绑定
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
您可以在回调中检查片段是否仍添加到其主机活动中
FirebaseFirestore.getInstance()
.collection("users")
.document("1")
.get()
.addOnSuccessListener { doc ->
if (isAdded) {
my_text_view.text = doc["name"] as String
}
}
然而,更好的解决方案是将业务逻辑转移到视图模型中。