android - Kotlin Android 扩展 : java. lang.IllegalStateException: View 不得为 null

标签 android kotlin android-view kotlin-android-extensions

我在我的 fragment 中使用 kotlin View 绑定(bind)。在某些情况下,应用程序崩溃并显示 IllegalStateException 且 View 为 null,我在可运行状态中访问它,该可运行状态是使用延迟 1.5 秒的处理程序调用的。

 numberRunnable = Runnable {
        if (mobileView.text.toString().isNotEmpty() && Utility.isMobileNumberValid(mobileView.text.toString())) {
            presenter.getCustomerDetails(Utility.getServerAcceptableContactNumber(mobileView.text.toString()))
        }
    }

mobileView 为空

处理程序代码: handler.postDelayed(numberRunnable, 1500)

我知道有一种可能性可以检查我的 fragment 中是否有 isAdded,但由于我无法复制该错误,所以我不确定这是否是问题所在。

最佳答案

该操作可能在用户离开 Fragment 后运行,并且 onDestroy()叫做。在这种状态下,Fragment 中不会有 View 实例。

一个简单的解决方法是创建一个全局变量来检查 fragment 的创建状态。将其设置为 trueonViewCreated()falseonDestroyView() (在 super 调用之前)。然后在执行逻辑之前检查 Runnable 内的值。

更好的解决方案(尽管这会受到竞争条件的影响并且需要将每个 Runnable 分配给全局变量)可能是使用 Handler.removeCallbacks()方法并传递所有 Runnables。

override fun onDestroyView() {
    handler.removeCallbacks(numberRunnable)
}

另一种可能性是简单地说 View 可以为空:

mobileView?.let {
    //Your stuff goes in here
    //You can reference mobileView using "it"
}

关于android - Kotlin Android 扩展 : java. lang.IllegalStateException: View 不得为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54309529/

相关文章:

Android:复制 ViewGroup 中的 View 元素

java - 请求 READ_PHONE_STATE 权限时应用程序因 IllegalStateException 崩溃

android - ListView项目背景:Android

java - TornadoFX模态对话框不会自动调整高度

android - 如何在recyclerview中实现拖放和滑动删除?

java - 如何更改 SearchView 下方底线的颜色

android - 在没有按下按钮的情况下添加插页式 admob 广告

javascript - HTML5 Canvas ,防手掌误触

kotlin - Kotlin拳击,无法理解其中的区别吗?

android - 像 View 寻呼机一样实现 View