[我想做的是在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)
}
productSelected LiveData
中更改值,这样观察者将再次收到通知。其中,开始观察after