У меня есть Activity, в которой есть фрагмент с моделью представления.Активность должна иметь возможность обновлять значение объекта liveata так же, как и фрагмент.
Я объявил свою ViewModel для фрагмента следующим образом:
class BottomNavViewModel:ViewModel() {
var isConnected = MutableLiveData<Boolean>()
}
В BottomNavFragment у меня есть этот код для объявления ViewModel
private val viewModel: BottomNavViewModel by lazy { ViewModelProviders.of(this).get(BottomNavViewModel::class.java) }
Несколько строк ниже этогоУ меня есть это:
private val changeObserver = Observer<Boolean> { value ->
value?.let {
Timber.i("Update of isConnected received. Updating text field now")
if(it) {
connectedText.text = getString(R.string.connected)
connectedText.setTextColor(activity!!.getColor(R.color.colorSelectedGreen))
}
else {
connectedText.text = getString(R.string.not_connected)
connectedText.setTextColor(activity!!.getColor(R.color.off_red))
}
}
...
override fun onAttach(context: Context) {
super.onAttach(context)
if (context is BottomNavFragment.OnFragmentInteractionListener) {
listener = context
}
else {
throw RuntimeException(context.toString() + " must implement OnFragmentInteractionListener")
}
viewModel.isConnected.observe(this, changeObserver)
}
Этот Наблюдатель никогда не получает удар.
В моей деятельности у меня есть это:
private var sharedBottomNavViewModel:BottomNavViewModel? = null
...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_connection)
sharedBottomNavViewModel = ViewModelProviders.of(this).get(BottomNavViewModel::class.java)
...
override fun onResume() {
super.onResume()
startBackgroundThread()
checkCameraPermission()
//TODO: Change this to listen for a connection
sharedBottomNavViewModel?.let {
Timber.i("Updating isConnected to true now")
it.isConnected.value = true
}
}
В журналах я вижу сообщения, указывающие, что обновление происходит, но наблюдатель никогда не получает сообщение.
Может кто-нибудьскажи мне, что я делаю не так, пожалуйста?