Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

重要更新:关于使用了navigation且升级到1.2.3以后的版本 #74

Open
hegaojian opened this issue Jul 6, 2021 · 12 comments

Comments

@hegaojian
Copy link
Owner

hegaojian commented Jul 6, 2021

在1.2.3之前的版本,使用navigation,虽然达到了切换fragment,不会销毁的作用,但是切换时生命周期不会走 onResume,onPause,而只能用 onHideChange方法去处理,这样的体验会不太友好,经过Alexxiaopang的建议,使用了新的方式替代.,从而达到了跟普通fragment一样的生命周期。从1.2.3版本前升级到1.2.3后需要修改name属性的配置,具体代码如下

<fragment
            android:id="@+id/host_fragment"
            android:name="me.hgj.jetpackmvvm.navigation.NavHostFragmentHideShow"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:defaultNavHost="true"
            app:navGraph="@navigation/main_navation" />
@hegaojian hegaojian pinned this issue Jul 6, 2021
@zhushenwudi
Copy link
Contributor

zhushenwudi commented Jul 10, 2021

作者大大,关于AFragment跳转到 BFragment
A -> B -> A -> B

其中 第一次 A -> B 传了一个 true 的bundle,第二次 A -> B 传了一个 false 的 bundle,但是在 B 中的 onResume 回调的都是第一次的 true,值没有改变。

代码:

 <fragment
    android:id="@+id/AFragment"
    android:name="xxx.AFragment"
    android:label="AFragment">
    <action
        android:id="@+id/action_AFragment_to_BFragment"
        app:destination="@id/BFragment" />
</fragment>
<fragment
    android:id="@+id/BFragment"
    android:name="xxx.BFragment"
    android:label="BFragment">
    <action
        android:id="@+id/action_BFragment_to_AFragment"
        app:destination="@id/AFragment"/>
</fragment>

第一次 A -> B

val bundle = Bundle()
bundle.putBoolean("isUser", true)
navigate(R.id.action_AFragment_to_BFragment, bundle)

B -> A

navigate(R.id.action_BFragment_to_AFragment)

第二次 A -> B

val bundle = Bundle()
bundle.putBoolean("isUser", false)
navigate(R.id.action_AFragment_to_BFragment, bundle)

BFragment.kt:

override fun onResume() {
    super.onResume()
    arguments?.run {
        val a = getBoolean("isUser")
        "$a".loge()
    }
}

@18810951092
Copy link

从A->B->C,最后从C->A是不是有问题 博主

@18810951092
Copy link

会创建出新的Fragment 用popBackStack指定到fragment失效

@hegaojian
Copy link
Owner Author

你popBackStack 是如何配置的

@hegaojian
Copy link
Owner Author

 <action
            android:id="@+id/action_CFrgment_to_AFragment"
            app:enterAnim="@anim/slide_in_right"
            app:exitAnim="@anim/slide_out_left"
            app:popEnterAnim="@anim/slide_in_left"
            app:popExitAnim="@anim/slide_out_right"
            app:popUpToInclusive="false"
            app:popUpTo="@id/Afragment" />

你C到A时可以这么调用 nav().navigateAction(R.id.action_CFrgment_to_AFragment)

@18810951092
Copy link

nav().popBackStack(R.id.action_CFrgment_to_AFragment,true) 用的它的这个方法 貌似有bug

@hegaojian
Copy link
Owner Author

你按照我上面的那种写法去试试吧,代码调用popBackStack 我还没有这么写过

@18810951092
Copy link

666 nav().navigateAction(R.id.action_CFrgment_to_AFragment) 试了下这个方法有效 嗯

@SaltedFish-Extreme
Copy link

老哥,请问navigation+BottomNavigationView支持滑动切换页面吗?就像ViewPager2一样

@SaltedFish-Extreme
Copy link

老哥,话说我在FragmentContainerView中使用你的NavHostFragmentHideShow出了bug,不知道是不是页面重复缓存了😢

e4a6bb2f8190f01d110791100c492376.mp4

@SaltedFish-Extreme
Copy link

老哥,话说我在FragmentContainerView中使用你的NavHostFragmentHideShow出了bug,不知道是不是页面重复缓存了😢

搞了一个晚上加半个上午终于弄好了,使用FragmentContainerView时需要使用自定义的NavHostFragment还有navGraphnavGraph的标签要用自定义FragmentNavigator的注解,还有在activity中不能使用bottomNavigationView.setupWithNavController方法,要用

bottomNavigationView.setOnItemSelectedListener {
            navHostFragment.navController.navigate(it.itemId)
            return@setOnItemSelectedListener true
        }

坑是真的多,走了很多弯路,但是用过之后就感觉就没那么难了🤔在这感谢自定义FragmentNavigator解决Navigation重复创建的问题还有何老哥自定义的FragmentNavigator和NavHostFragment了😉

@LYChunGit
Copy link

@zhushenwudi 你的问题最近我在看项目出现过,官方有文档可以解决这个问题,这个应该跟fragment栈内复用有关,你可以使用官网《嵌套导航图》这个栏目 把重复的fragment多放在嵌套图里边,这样可以解决你的问题
https://developer.android.google.cn/guide/navigation/navigation-nested-graphs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants