I'm trying to populate some live data from within the MainActivity into a ViewModel. However, the Fragment only appears to observe the initial data once ("NO DATA YET") which is set in the ViewModel itself.
I've tried updating the data by adding a update() function in the ViewModel as well as setting uzTelNotifViewModel.uzTelNotification.value = "NEW DATA".
Can someone provide me some advice?
MainActivity
override fun onCreate(savedInstanceState: Bundle?) {
...
uzTelNotifViewModel = ViewModelProvider(this)[UzTelNotifViewModel::class.java]
binding.uzTelNotifViewModel = uzTelNotifViewModel
...
}
override fun onCreate(savedInstanceState: Bundle?) {
...
uzTelNotifViewModel.update("NEW DATA HERE")
...
}
UzTelNotifFragment
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.lifecycleOwner = viewLifecycleOwner
useMaterialSharedAxisXForwardAnimation = false
viewModel = ViewModelProvider(this)[UzTelNotifViewModel::class.java]
binding.viewModel = viewModel
viewModel.uzTelNotification.observe(viewLifecycleOwner) {
binding.uzTelNotifBar.text = it.toString()
}
UzTelNotifViewModel
class UzTelNotifViewModel : ViewModel() {
val uzTelNotification = MutableLiveData<String>('NO DATA YET')
val uzTelNotifVisible = MutableLiveData<Boolean>(true)
fun update(data: String) {
uzTelNotification.value = data
}
}
uz_tel_notif_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="android.view.View"/>
<variable
name="viewModel"
type="org.linphone.activities.main.viewmodels.UzTelNotifViewModel" />
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="@dimen/uztelnotif_fragment_size"
android:background="?attr/accentColor"
android:orientation="horizontal"
android:visibility="@{viewModel.uzTelNotifVisible ? View.VISIBLE : View.GONE, default=gone}"
>
<TextView
android:id="@+id/uzTelNotifBar"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:gravity="center_vertical"
android:paddingLeft="15dp"
android:text="@{viewModel.uzTelNotification, default='none'}"
android:textColor="?attr/accentTextColor"
android:textSize="15sp" />
</RelativeLayout>