Kotlin视图绑定java.lang.IllegalStateException:视图在侦听器内不能为null

时间:2018-11-28 00:04:26

标签: android firebase kotlin google-cloud-firestore kotlin-android-extensions

我正在使用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

1 个答案:

答案 0 :(得分:2)

您可以在回调中检入片段是否仍添加到其主机活动中,

FirebaseFirestore.getInstance()
.collection("users")
.document("1")
.get()
.addOnSuccessListener { doc ->
    if (isAdded) {
        my_text_view.text = doc["name"] as String
    }
}

但是,更好的解决方案是将业务逻辑移至视图模型。