我有一个观察者,比被称为改变片段的观察者。
问题是当我返回时,观察者立即被调用,我的应用程序崩溃并带有
java.lang.IllegalArgumentException:导航目标com.superapps.ricardo.tablepro:id / action_searchFragment_to_yourGameList2此NavController未知。
我不明白为什么要调用它。
这是更改列表的唯一方法
override fun onSuccess(gamePair: Pair<Int, List<BggGame>>) {
CoroutineScope(Main).launch{
//goToList(gamePair.second, binding.input.text.toString())
viewModel.setGameList(gamePair.second)
}
}
这是视图模型的创建和更改片段代码
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProviders.of(this).get(SearchViewModel::class.java)
viewModel.gameList.observe(viewLifecycleOwner, Observer {
goToList(it, binding.input.text.toString())
})
}
private fun goToList(games: List<BggGame>, user: String) {
val action = SearchFragmentDirections.actionSearchFragmentToYourGameList2(user)
val gameList = GameList()
gameList.gameList = games
action.gameList = gameList
try {
Navigation.findNavController(view!!).navigate(action)
viewModel.gameList.removeObservers(viewLifecycleOwner)
} catch (e: Exception){
Log.e("a0,","a..", e)
}
progressDialog.dismiss()
}
LiveData
保留最后设置的值。当在observe()
上调用LivaData
时,如果LiveData
具有值,则使用先前设置的值立即调用观察者。
如果要像使用案例一样将LiveData
用于“事件”,则实时数据应公开一个Event
对象,该对象只能使用一次。
这里是此类implementation类的良好Event
的示例。