如何让返回手势实现与NavigateUp一致的页面返回行为?
基础结构
- 项目采用Jetpack Navigation组件:MainActivity中维护NavHostFragment,包含两个业务Fragment
- MainFragment:展示主页内容,是NavHostFragment启动时默认加载的页面
- SearchFragment:展示搜索结果
- UI布局:MainActivity布局嵌套在DrawerLayout内,顶部带ActionBar;ActionBar包含搜索图标项,点击该图标会同时展开SearchView并导航至SearchFragment,此功能正常运行
问题现象
符合预期的返回流程(使用ActionBar返回箭头)
通过ActionBar返回箭头触发(内部调用NavigateUp())时,仅需两步即可回到MainFragment:
- 首次点击:关闭软键盘、收起SearchView,ActionBar显示SearchFragment页面名称
- 二次点击:完成导航,返回MainFragment
异常的返回流程(使用侧滑返回手势)
使用系统侧滑返回手势(从屏幕边缘向内拖动)时,需要三步才能回到MainFragment:
- 第一步:仅关闭软键盘
- 第二步:仅收起SearchView
- 第三步:才会从SearchFragment导航返回至MainFragment
已尝试的解决方案及困境
- 尝试过的方案:
- 重写MainActivity的
onBackPressed()方法 - 添加
onBackPressedDispatcher回调处理返回事件 - 在
onCreateOptionsMenu中对SearchView做状态监听
- 重写MainActivity的
- 遇到的问题:
!viewSearch.isIconified条件始终无法触发,推测返回事件被提前消费,但能够正常检测到isIconified的状态,目前无法推进解决
(注:已录制预期行为与实际行为的对比视频)
内容的提问来源于stack exchange,提问作者Gojira
相关产品推荐
相关产品推荐

