当我返回片段时,观察者会立即被召唤

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

我有一个观察者,比被称为改变片段的观察者。

问题是当我返回时,观察者立即被调用,我的应用程序崩溃并带有

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()

    }
android kotlin observers
1个回答
0
投票

LiveData保留最后设置的值。当在observe()上调用LivaData时,如果LiveData具有值,则使用先前设置的值立即调用观察者。

如果要像使用案例一样将LiveData用于“事件”,则实时数据应公开一个Event对象,该对象只能使用一次。

这里是此类implementation类的良好Event的示例。

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