我正在将我的应用程序从视图移至 jetpack compose。默认导航使用nav_graph
。该应用程序是按照一个活动、多个片段的原则构建的。为了缓慢移动应用程序,我尝试仅在片段中加载 compose。因此片段可以看作是 compose 的嵌套。我这样做是为了在移动导航之前保持导航到位。我试图让 compose 使用 nav_graph 导航到片段。
目前,我的片段如下所示:
登录片段:
class SignInFragment : BaseFragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val composeView = ComposeView(requireContext())
composeView.apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
activity?.let {
SignInScreen()
}
}
}
return composeView
}
}
我正在尝试导航到HomeFragment
。目前,我使用的导航如下:
findNavController().navigate(SignInFragmentDirections.actionSignInFragmentToHomeFragment())
现在我的可组合项如下:
@Composable
fun SignInScreen(authViewModel: AuthViewModel = viewModel())
{
val authState by authViewModel.authState.collectAsState()
val lifecycleEventObserver = remember {
LifecycleEventObserver { _, event ->
if (event == Lifecycle.Event.ON_RESUME) {
authViewModel.checkAuthorized()
}
}
}
ProcessLifecycleOwner.get().lifecycle.addObserver(lifecycleEventObserver)
if(authState is AuthUIState.LoginSuccess) {
navigateToDashboard()
}
Button(
onClick = { authViewModel.signIn() },
) {
Text("SignIn")
}
}
fun navigateToDashboard() {
// Try to navigate to home fragment
}
基本上,当我加载时SignInScreen
,我会检查授权状态。如果获得授权,我会重定向到主页,否则,我会显示按钮供用户登录。
我无法找到一种方法来做navigateToDashboard()
我确实想将片段仅用于 nav_graph,这样当所有屏幕都处于 Compose 状态时,我就可以进行转换。
有什么想法吗?
让您的片段像以前一样进行导航。
将回调函数作为参数从片段传递到组合。
因此,根据您的代码,像这样更改 SignInFragment:
和 SignInScreen:
希望有帮助。