我已经创建了一个应用程序结构,其中包含BaseActivity和BaseViewModel。所有其他活动/视图模型都必须扩展这些基类。我这样做是因为我需要在任何活动中调用一些方法(例如showInfo()方法)。
当我在BaseViewModel中更新LiveData并在BaseActivity中观察它时,一切正常。但是当我在子ViewModel(例如UsersViewModel)中更新该LiveData时,仅使用BaseActivity观察它将不起作用。
当我想要通过ViewModel在任何活动中调用某些基本方法时,我该怎么办?
当我在BaseViewModel中更新LiveData并在BaseActivity中观察它时,一切正常。但是当我在子ViewModel(例如UsersViewModel)中更新该LiveData时,仅使用BaseActivity观察它将不起作用。
当我想要通过ViewModel在任何活动中调用某些基本方法时,我该怎么办?
open class BaseActivity : AppCompatActivity() {
//inject viewModel with Koin
private val baseViewModel: BaseViewModel by viewModel()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
baseViewModel.actionShowInfo.observe(this, Observer {
showInfo(it)
}
}
protected fun showInfo(message: String) {
AlertDialog.Builder(this)
.setMessage(message)
.setPositiveButton(R.string.ok, null)
.show()
}
}
open class BaseViewModel : ViewModel() {
private val actionShowInfo = MutableLiveData<String>()
init {
actionShowInfo.postValue("some base info") //showInfo() in BaseActivity will be called
}
}
class UsersActivity : BaseActivity() {
private val usersViewModel: UsersViewModel by viewModel()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(
}
}
class UsersViewModel: BaseViewModel {
init {
//showInfo() in BaseActivity will not be called
actionShowInfo.postValue("some info")
}
}