向LiveData多次添加同一观察者

问题描述 投票:0回答:1

我们的团队在开发当前应用程序时正在使用ViewModelLiveData组件。在单击Button的一种情况下,我们正在启动网络API调用。

只要API结果可用,Repository就会返回LiveData

ViewModel中,仅当单击Observer时才附加Button,由于我们在ViewModel中,因此我们正在使用observeForever()

这是代码;


//ViewModel Code


//Api Observer
 var apiObserver: Observer<ApiState> =
            Observer { response ->

                when (response.currentState) {

                    StateConstants.STATE_API_CALLED -> showLoading()
                    StateConstants.STATE_API_COMPLETE -> stopLoading()
                    StateConstants.STATE_DATA_LOADED -> processResponseData(response.data)
                    StateConstants.STATE_API_ERROR -> showError(response.errorMessage)

                }
            }


fun sendReminderToCustomer() { //This method is called on Button click from XML

        repo.apiStateLiveData.observeForever(apiObserver) //attach Observer and Observe Forever
        repo.sendReminderDetails() //make api call 

    }

override fun onCleared() {
        super.onCleared()
        repo.apiStateLiveData.removeObserver(apiObserver) //remove Observer
    }

由于每次单击按钮,我们都会在LiveData上附加相同的观察者,否则会有未知的副作用,例如

  1. 将同一观察者多次添加到LiveData观察者列表中吗?
  2. 如果多次添加同一观察者,onChanged()方法也会被多次调用吗?
android android-livedata observer-pattern android-viewmodel android-mvvm
1个回答
0
投票

是和是。确保仅添加一次观察者(例如,在viewModel的init中)

© www.soinside.com 2019 - 2024. All rights reserved.