hegaojian / JetpackMvvm

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

目前被修改过的Navigation是否能做到类似replace的功能 #24

Closed ppg408331701 closed 4 years ago

ppg408331701 commented 4 years ago

比如有 A . B . C . D 四个fragment。 正常跳转的话的 A ->B ->C ->D 此时的回退栈: A --B--C--D

如果有个场景是 A ->B -替换->C-替换->D 此时的回退栈: A -- D

如果拿作者的demo举例子的话就是 首页 --> 搜索页 -->搜索结果页

如果要求 [搜索页] 点击搜索跳转到 [搜索结果页] 后, [搜索页]从回退栈中移除 此时的回退栈 首页 --搜索结果页

类似淘宝 京东的搜索页都是这样的逻辑

我看了官方的Navigation文档,google推荐是使用popUpTo 和 popUpToInclusive来清除当前页和目标页面之间的栈元素。但是感觉使用起来还需要拦截回退事件,不够自然

作者有什么建议或者思路呢

hegaojian commented 4 years ago

刚想了一种 在搜索页跳转到搜索结果页时就是把当前搜索页给出栈,但是会有一些bug,所以放弃了 目前觉得 好的方案就是你所说的拦截回退事件了 navigation在复杂的跳转场景上面还是显得比较笨重的,没有activity栈那么灵活,好管理

ppg408331701 commented 4 years ago

确实,我之前尝试了很多方案都有问题

还有一种方案是 在自定义的navigation里面写一个 replaceFragment(xxx) 方法, 在页面中直接获取navigation转成我们自定义的navigation。调用replaceFragment方法。但是我担心这样改动不安全,还是老老实实用官方的用法吧