How to get a result from fragment using Navigation Architecture Component?

后端 未结 6 460
无人共我
无人共我 2020-12-13 06:07

Let\'s say that we have two fragments: MainFragment and SelectionFragment. The second one is build for selecting some object, e.g. an integer. Ther

6条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-13 06:37

    Use these extension functions

    fun  Fragment.getNavigationResult(key: String = "result") =
        findNavController().currentBackStackEntry?.savedStateHandle?.get(key)
    
    fun  Fragment.getNavigationResultLiveData(key: String = "result") =
            findNavController().currentBackStackEntry?.savedStateHandle?.getLiveData(key)
    
    fun  Fragment.setNavigationResult(result: T, key: String = "result") {
        findNavController().previousBackStackEntry?.savedStateHandle?.set(key, result)
    }
    

    So if you want to send result from Fragment B to fragment A

    Inside Fragment B

    setNavigationResult(false, "someKey")
    

    Inside Fragment A

    val result = fragment.getNavigationResultLiveData("someKey")
    result.observe(viewLifecycleOwner){ booleanValue-> doSomething(booleanValue)
    

提交回复
热议问题