导航组件:获取活动结果

Erk*_*kan 6 android android-activity onactivityresult android-architecture-navigation

我正在使用NavController来启动一个活动 - 它有自己的导航图 - 用于登录/注册流程。
现在我想在更新 UI时获得LoginActivity(成功、失败)的结果。MainActiviy

MainActvity (start)-> LoginActivity
MainActvity <-(result) LoginActivity end
Run Code Online (Sandbox Code Playgroud)

是否可以使用导航组件来处理这种情况,或者我是否必须使用类似的东西startActivityForResult(LoginActivity...)来获取结果LoginActivity

或者,还有更好的方法?我认为一个可能的解决方案可能是在 Activity 之间使用相同的 viewModel 实例,但不确定这是否可行。:-/

小智 0

这是可能的:

如果片段 A 需要片段 B 的结果..

A 应该从 currentBackStackEntry 获取 savingStateHandle,调用提供密钥的 getLiveData 并观察结果。

findNavController().currentBackStackEntry?.savedStateHandle?.getLiveData<Type>("key")?.observe(
    viewLifecycleOwner) {result ->
    // Do something with the result.
}
Run Code Online (Sandbox Code Playgroud)

B应该从previousBackStackEntry中获取savedStateHandle,并将结果设置为与A中的LiveData相同的key

findNavController().previousBackStackEntry?.savedStateHandle?.set("key", result)
Run Code Online (Sandbox Code Playgroud)

来源:https ://issuetracker.google.com/issues/79672220#comment55