布局未从视图模型获取数据到数据绑定

Layout is not getting data to data binding from view model

我正在尝试学习如何使用 modelViewScope 和 liveData 从挂起的数据库调用中获取数据,并使用收集到的数据对片段中的视图进行数据绑定,以消除设置视图的样板代码。我的代码没有收到任何错误,但我没有收到我在视图中设置的值。

TextView 文本将显示@{viewModel.listingDetails.locationAddress 而不是 LiveData 信息。

我错过了什么?或者我应该编辑什么以获得正确的值?

我的列表存储库代码:

interface ListingRepository {
    ...
    suspend fun getListingDetailsById(id: String): ListingDetailEntries
}

我的片段代码:

class ListingDetailsFragment : ScopedFragment(), KodeinAware {
    override val kodein by closestKodein()
    private val viewModelFactoryInstanceFactory: ((String) -> ListingDetailsViewModelFactory) by factory()
    private lateinit var viewModel: ListingDetailsViewModel
    private val args: ListingDetailsFragmentArgs by navArgs()

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        viewModel = ViewModelProvider(this, viewModelFactoryInstanceFactory(args.id))
            .get(ListingDetailsViewModel::class.java)

        val binding: ListingDetailsFragmentBinding =
            DataBindingUtil.inflate(inflater, R.layout.listing_details_fragment, container, false)
        binding.lifecycleOwner = this
        binding.viewModel = viewModel
        return binding.root
    }

我的 ViewModel 代码:

class ListingDetailsViewModel(
    private val id: String,
    private val listingRepository: ListingRepository
) : ViewModel() {
    var listingDetails = liveData(Dispatchers.IO) {
        val listing = listingRepository.getListingDetailsById(id)
        emit(listing)
    }
}

我的布局代码:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="viewModel"
            type="com.example.testsentia.ui.detail.ListingDetailsViewModel" />
    </data>

            <TextView
                ...
                android:text="@{viewModel.listingDetails.locationAddress" />
</layout>

当我从片段中观察时,我得到了我需要的值,所以我知道数据存在我只是不知道如何正确地做到这一点。

<TextView
...
android:text="@{viewModel.listingDetails.locationAddress" /> //You're missing closing brace here