导航控制器在实时数据观察器中被调用两次

问题描述 投票:1回答:1

[我想做的是在LiveData观察器中使用Navigation控制器,因此,当用户单击列表中的项目时,它会通知ViewModel,然后ViewModel更新数据,并在发生这种情况时,片段会观察到此情况并导航到下一个。

我的问题是,由于某种原因,观察者被两次调用,第二次,我收到一个异常,指出该NavController的目的地未知。

我的片段已点击:

override fun onClick(view: View?) {
        viewModel.productSelected.observe(viewLifecycleOwner, Observer<ProductModel> {
            try {
                this.navigationController.navigate(R.id.action_product_list_to_product_detail)
            } catch (e: IllegalArgumentException) { }
        })

        val itemPosition = view?.let { recyclerView.getChildLayoutPosition(it) }
        viewModel.onProductSelected(listWithHeaders[itemPosition!!].id)
    }

在我的ViewModel中:

fun onProductSelected(productId: String) {
    productSelected.value = getProductById(productId)
}
android kotlin mvvm navigation android-livedata
1个回答
0
投票
之所以被称为两次,是因为首先订阅,然后又返回默认值,然后在productSelected LiveData中更改值,这样观察者将再次收到通知。其中,开始观察

after

© www.soinside.com 2019 - 2024. All rights reserved.