android - View 模型 : Check if fragment is resume or stop

标签 android mvvm rx-java2 android-livedata android-viewmodel

我在 ViewModel 内执行网络操作以 10 seconds 的间隔重复获取与 RxJava。但是,当我的 Fragment 在屏幕上不可见时,我不想从此 API 获取数据,例如,当我在其顶部打开一个 Activity 时,我将得到类似 if(!isResume) return 的代码。 。我的问题是,使用 MutableLiveData<Boolean> 可以吗?其中值将在 onResume 中更新和onPause所以如果不恢复或者违反 MVVM 的概念,我可以忽略网络请求?我们可以这样做,但不确定这样做是否可以。

最佳答案

您可以让您的 ViewModel 实现接口(interface) DefaultLifecycleObserver ( https://developer.android.com/reference/androidx/lifecycle/DefaultLifecycleObserver ),然后重写方法 onResume onPause。更新内部 bool 变量,例如isResumed,当调用这些方法时,您将能够检查其他方法是否相应的 fragment 处于恢复状态。

class YourViewModel : DefaultLifecycleObserver {
    private var isResumed = false

    override fun onResume(owner: LifecycleOwner) {
        isResumed = true
    }

    override fun onPause(owner: LifecycleOwner) {
        isResumed = false
    }
}

您还需要更新 Fragment 代码以将 ViewModel 添加为生命周期观察者:

class YourFragment : Fragment() {
    private val viewModel: YourViewModel // initialize it

    override fun onViewCreated(...) {
        lifecycle.addObserver(viewModel)
    }
}

关于android - View 模型 : Check if fragment is resume or stop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67240724/

相关文章:

android - 向 CompositeDisposable 添加大量 Disposable 的潜在危害

android - 如何在不传入 Retrofit 实例的情况下使用 Retrofit 的 GsonConverter

c# - 使用 Prism、MVVM、Unity 查看切换导航

java - 有没有像 Single.empty()

java - 如何修复 android 10 中的崩溃处理

android - PagerAdapter 内部的 onClickListener

android - 如何在 ICS 中设置系统范围的代理

java - 如何实现 View 幻灯片

mvvm - 谁应该在 MvvmCross 中创建 View 模型实例

mvvm - Prism 中 View 模型内的依赖属性