hegaojian / JetpackMvvm

:chicken::basketball:一个Jetpack结合MVVM的快速开发框架,基于MVVM模式集成谷歌官方推荐的JetPack组件库:LiveData、ViewModel、Lifecycle、Navigation组件 使用Kotlin语言,添加大量拓展函数,简化代码 加入Retrofit网络请求,协程,帮你简化各种操作,让你快速开发项目
https://github.com/hegaojian/JetpackMvvm
Apache License 2.0
3.13k stars 610 forks source link

Navigation 启动新页面并关闭当前页面的功能如何实现? #90

Closed wflian closed 2 years ago

wflian commented 2 years ago

比如登录页面 LoginFragment 里面的登录按钮,登录成功以后 打开 MainFragment 并关闭 LoginFragment。这情况如何实现呢?

hegaojian commented 2 years ago

这是navigation的一个坑,我目前还没有发现有啥好的方法去支持这个业务,我建议你 将登陆页作为一个activity去写,登陆成功以后跳转到 main

wflian commented 2 years ago

这个场景不止这一个地方用吧!我觉得这种场景很常用呢

hegaojian commented 2 years ago

这种场景确实是比较常见的,但是目前navigation貌似不支持 从 fragmentA 跳转到 尚未创建的fragmentB 时关闭 fragmentA ,如果是 A ->B ->C    C想跳转到A时关闭BC这个是支持的

T-BayMax commented 2 years ago

可以用尝试popBackStack或navigateUp

T-BayMax commented 2 years ago

https://developer.android.google.cn/guide/navigation/navigation-navigate

wflian commented 2 years ago

findNavController().navigate( R.id.action_splashFragment_to_mainFragment, bundleOf(MainFragment.usernameKey to "Alex Gladkov"), navOptions { popUpTo(R.id.nav_graph_application) { inclusive = true } } 这种方式可以实现。 另外还有一个问题:一个Fragment启动自己本身 为啥没反应,启动失败

<fragment
      android:id="@+id/testFragment"
      android:name="com.test.testFragment"
      android:label="TestFragment"
      tools:layout="@layout/fragment_test"
      >
    <action
        android:id="@+id/action_testFragment_self"
        app:destination="@id/testFragment"
        app:enterAnim="@anim/slide_in_right"
        app:exitAnim="@anim/slide_out_left"
        app:popEnterAnim="@anim/slide_in_left"
        app:popExitAnim="@anim/slide_out_right" />
  </fragment>
android-taoge commented 2 years ago

直接在action里加入最后两句,可以实现跳转到目标页面,并关闭之前页面 <action '''''' app:destination="@id/mainFragment" .... app:popUpTo="@id/mainFragment" app:popUpToInclusive="true" />