Я создал Обозреватель во Фрагменте, который отлично работает (он запускает тост, когда увеличивается Int), но когда я пытаюсь переместить этот код в Activity, наблюдатель, похоже, не подключается и не обновляется, когда LiveData изменяется.
Фрагмент ( это работает! ):
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
loginViewModel = ViewModelProviders.of(this).get(LoginViewModel::class.java)
loginViewModel.getLoginAttemptCount().observe(this, Observer { count ->
if (count > 0) makeToast("Authentication failed")
})
}
Активность (, когда я ставлю наблюдатель в Activity это не делает! ):
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.login_activity)
loginViewModel = ViewModelProviders.of(this).get(LoginViewModel::class.java)
loginViewModel.getLoginAttemptCount().observe(this, Observer { count ->
if (count > 0) makeToast("Authentication failed")
})
}
ViewModel ( оба вызывают одну и ту же функцию в VM ):
fun getLoginAttemptCount(): MutableLiveData<Int> {
Log.d(TAG, "getLoginAttemptCount()")
return firestoreRepository.getLoginAttemptCount() }
Репо ( вызывается с ВМ ):
fun getLoginAttemptCount(): MutableLiveData<Int>{
Log.d(TAG, "getLoginAttemptCount()")
return loginAttempt
}
loginAttempt.value увеличивается при каждой попытке входа в систему, и я подтвердил это работает в Logcat ..
Для информации, makeToast - это просто функция для создания оправданного тоста (текст и позиция):
private fun makeToast(message: String) {
val centeredText: Spannable = SpannableString(message)
centeredText.setSpan(
AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER),
0, message.length - 1,
Spannable.SPAN_INCLUSIVE_INCLUSIVE
)
val toast = Toast.makeText(this, centeredText, Toast.LENGTH_LONG)
toast.setGravity(Gravity.CENTER,0,0)
toast.show()
Log.d(TAG, "Toast message: $message")
}
Я предполагаю, что это связано с lifeCycleOwner, но я в растерянности!