Android 使用 Rx-Java 旋转后视图为空
Android views are null after rotation when using Rx-Java
我正在使用 Kotlin Android 扩展访问片段中的所有视图,此视图按预期工作,即使在屏幕旋转后也可以正常访问。
当我尝试像这样访问 Rx-Java 可观察间隔内的视图时,问题就开始了:
var interval = Observable.interval(10, TimeUnit.SECONDS, Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
interval.retry().subscribe { updateUi(); }
如果我在间隔之间旋转屏幕。下次 updateUi() 方法 运行 作为 observable 的一部分时,其中的视图将为 null,应用程序将崩溃并出现以下异常:
io.reactivex.exceptions.OnErrorNotImplementedException: text_view must not be null
但是如果我尝试 运行 observable 之外的方法,一切都会正常工作。
我知道使用 findViewById() 访问视图将正确检索视图,但这违背了拥有 kotlin-android-extensions 的目的。
旋转时,屏幕正在重新设置,因此旧视图消失了。
您必须在 onStop()
.
中取消订阅(由 subscribe()
调用返回)
也许您应该尝试 Android 架构中的 ViewModel
。我最近一直在使用它并且非常喜欢它。这也将解决您的问题。 https://medium.com/google-developers/viewmodels-a-simple-example-ed5ac416317e
我正在使用 Kotlin Android 扩展访问片段中的所有视图,此视图按预期工作,即使在屏幕旋转后也可以正常访问。
当我尝试像这样访问 Rx-Java 可观察间隔内的视图时,问题就开始了:
var interval = Observable.interval(10, TimeUnit.SECONDS, Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
interval.retry().subscribe { updateUi(); }
如果我在间隔之间旋转屏幕。下次 updateUi() 方法 运行 作为 observable 的一部分时,其中的视图将为 null,应用程序将崩溃并出现以下异常:
io.reactivex.exceptions.OnErrorNotImplementedException: text_view must not be null
但是如果我尝试 运行 observable 之外的方法,一切都会正常工作。
我知道使用 findViewById() 访问视图将正确检索视图,但这违背了拥有 kotlin-android-extensions 的目的。
旋转时,屏幕正在重新设置,因此旧视图消失了。
您必须在 onStop()
.
subscribe()
调用返回)
也许您应该尝试 Android 架构中的 ViewModel
。我最近一直在使用它并且非常喜欢它。这也将解决您的问题。 https://medium.com/google-developers/viewmodels-a-simple-example-ed5ac416317e