Kotlin Android扩展片段视图null



我有一个系统,可以在基本视图接口中处理错误和进度键。我在片段和活动中实现了界面,并通过

这样的Overriden Geters传递了必要的视图
    override val mContentView: View
    get() = contentView

contentView是通过Kotlin Android扩展程序提供的" contentView"的视图。ContentView是Snackbar所需的遗传的根视图。

在我的一种观点中,我得到了一个例外

contentview不得为null

当视图膨胀并且具有可见的片段时。

很奇怪的是,如果我在onviewCreated中访问contentView,则错误将消失!

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    contentView.let {
    }
}

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

ps1:我正在使用rxjava2访问视图,但它在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扩展和片段。因此,在onViewCreated()中初始化视图或编写view.contentView....

另外,使用前面的let使用CC_6:contentView?.let{ }

您用kotlin合成扩展所指的contentView,它只是为您提供了对view对象的引用(在案例内容视图中(。

如果在创建布局或视图之前访问此对象,它将返回NULL

现在在碎片中。,它在创建视图(构建或初始化(的 onviewCreated((中。因此,创建了您的 contentView (初始化(

最新更新