android - Kotlin android 扩展 fragment View null

标签 android kotlin kotlin-android-extensions

我有一个在 baseview 界面中处理错误和进度条的系统。
我在我的 fragment 和 Activity 中实现接口(interface),并通过覆盖的 getter 传递必要的 View ,例如

    override val mContentView: View
    get() = contentView

其中 contentView 是通过 kotlin android 扩展提供的 ID 为“contentView”的 View 。 contentView 是 Snackbar 显示错误所需的 fagment 的 Root View 。

在我的一种观点中,我得到了一个异常(exception)

contentView must not be null



当 View 膨胀并且具有它的 fragment 可见时。

奇怪的是,如果我在 onViewCreated 中访问 c​​ontentView,错误就会消失!
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    contentView.let {

    }

}

有人可以解释发生了什么吗?

ps1:我正在使用 RxJava2 访问 View ,但它在 Rxandroids mainThread 上

ps2:可能的提示可能是异常堆栈跟踪是警告而不是错误(未显示在 logcat 级别错误或调试中)

ps3:完整的堆栈跟踪
 02-25 11:29:45.814 27055-27055/com.beguchi.android.peyk W/System.err: io.reactivex.exceptions.OnErrorNotImplementedException: contentView must not be null
02-25 11:29:45.814 27055-27055/com.beguchi.android.peyk W/System.err:     at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:704)
02-25 11:29:45.814 27055-27055/com.beguchi.android.peyk W/System.err:     at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:701)
02-25 11:29:45.814 27055-27055/com.beguchi.android.peyk W/System.err:     at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)
02-25 11:29:45.815 27055-27055/com.beguchi.android.peyk W/System.err:     at io.reactivex.internal.observers.LambdaObserver.onNext(LambdaObserver.java:67)
02-25 11:29:45.815 27055-27055/com.beguchi.android.peyk W/System.err:     at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:200)
02-25 11:29:45.815 27055-27055/com.beguchi.android.peyk W/System.err:     at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)
02-25 11:29:45.815 27055-27055/com.beguchi.android.peyk W/System.err:     at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)
02-25 11:29:45.815 27055-27055/com.beguchi.android.peyk W/System.err:     at android.os.Handler.handleCallback(Handler.java:790)
02-25 11:29:45.815 27055-27055/com.beguchi.android.peyk W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
02-25 11:29:45.815 27055-27055/com.beguchi.android.peyk W/System.err:     at android.os.Looper.loop(Looper.java:164)
02-25 11:29:45.815 27055-27055/com.beguchi.android.peyk W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6494)
02-25 11:29:45.815 27055-27055/com.beguchi.android.peyk W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
02-25 11:29:45.815 27055-27055/com.beguchi.android.peyk W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:440)
02-25 11:29:45.815 27055-27055/com.beguchi.android.peyk W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
02-25 11:29:45.816 27055-27055/com.beguchi.android.peyk W/System.err: Caused by: java.lang.IllegalStateException: contentView must not be null
02-25 11:29:45.816 27055-27055/com.beguchi.android.peyk W/System.err:     at com.beguchi.android.peyk.userInterfaces.main.idle.IdleFragment.getMContentView(IdleFragment.kt:32)
02-25 11:29:45.816 27055-27055/com.beguchi.android.peyk W/System.err:     at com.beguchi.android.peyk.scafolding.general.BaseView$DefaultImpls.renderError(BaseView.kt:24)
02-25 11:29:45.816 27055-27055/com.beguchi.android.peyk W/System.err:     at com.beguchi.android.peyk.scafolding.general.BaseFragmentView.renderError(BaseFragmentView.kt:13)
02-25 11:29:45.816 27055-27055/com.beguchi.android.peyk W/System.err:     at com.beguchi.android.peyk.userInterfaces.main.idle.IdleFragment.renderError(IdleFragment.kt:102)
02-25 11:29:45.816 27055-27055/com.beguchi.android.peyk W/System.err:     at com.beguchi.android.peyk.scafolding.general.BaseView$DefaultImpls.renderCommon(BaseView.kt:18)
02-25 11:29:45.816 27055-27055/com.beguchi.android.peyk W/System.err:     at com.beguchi.android.peyk.scafolding.general.BaseFragmentView.renderCommon(BaseFragmentView.kt:13)
02-25 11:29:45.817 27055-27055/com.beguchi.android.peyk W/System.err:     at com.beguchi.android.peyk.userInterfaces.main.idle.IdleFragment.render(IdleFragment.kt:83)
02-25 11:29:45.817 27055-27055/com.beguchi.android.peyk W/System.err:     at com.beguchi.android.peyk.userInterfaces.main.idle.IdlePresenter$bindObservables$3.accept(IdlePresenter.kt:48)
02-25 11:29:45.817 27055-27055/com.beguchi.android.peyk W/System.err:     at com.beguchi.android.peyk.userInterfaces.main.idle.IdlePresenter$bindObservables$3.accept(IdlePresenter.kt:15)
02-25 11:29:45.817 27055-27055/com.beguchi.android.peyk W/System.err:     at io.reactivex.internal.observers.LambdaObserver.onNext(LambdaObserver.java:63)
02-25 11:29:45.817 27055-27055/com.beguchi.android.peyk W/System.err:   ... 10 more

最佳答案

onCreateView()一个 getView()为空,见 Kotlin Android Extensions and Fragments .因此,在 onViewCreated() 中初始化 View 或写view.contentView.... .

另外,请使用 let前面有 ?. : contentView?.let{ } .

关于android - Kotlin android 扩展 fragment View null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48971322/

相关文章:

android - 检测是否所有 EditText 都没有焦点

android - react-native 本地 json 文件

android - Ljava/net/URL 类中没有字段主机

kotlin - 获得改造异常方法返回类型不得在 kotlin 中包含类型变量或通配符

java - Kotlin 数据类中的私有(private)成员变量

android - Kotlin Android 扩展访问 TextView

android - camera2 视频录制性能差

android - 固定位置的ImageView

android - 当在键盘上按下特定字符时,我可以切换到另一个 EditText 吗?

Android 更改语言环境以进行测试