Я создал структуру в приложении с BaseActivity и BaseViewModel. Все остальные виды деятельности / viewModels должны быть расширены этими базовыми классами. Я сделал это, потому что мне нужно вызывать некоторые методы в любой деятельности (например, метод showInfo ()).
Когда я обновляю LiveData в BaseViewModel и наблюдаю его в BaseActivity, все работает хорошо. Но когда я обновляю эти LiveData в дочернем ViewModel (например, UsersViewModel) только с 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")
}
}