You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在目标页面加载前显示SnackBar,消失后再执行页面跳转?

实现SnackBar显示后再跳转页面的方案

嘿,这个需求完全可以搞定!核心思路是利用SnackBar的回调监听它的消失事件,等SnackBar彻底消失后再执行页面跳转/返回操作。你提到的onSupportNavigateUp()和onBackPressed()确实是合适的代码放置位置,不过得调整原有逻辑,不能直接立即执行返回动作。

具体实现步骤

1. 修改onBackPressed()方法

把原来直接调用super.onBackPressed()的逻辑,改成先显示SnackBar,等它消失后再执行返回:

@Override
public void onBackPressed() {
    // 先不要立即执行返回
    // super.onBackPressed();

    // 创建并显示SnackBar
    final Snackbar snackbar = Snackbar.make(parent_view_chapter, "Redirecting to another page....please wait", Snackbar.LENGTH_SHORT);
    
    // 添加消失回调,确保SnackBar消失后再跳转
    snackbar.addCallback(new Snackbar.Callback() {
        @Override
        public void onDismissed(Snackbar snackbar, int event) {
            super.onDismissed(snackbar, event);
            // 当SnackBar完全消失后,执行页面返回
            super.onBackPressed();
        }
    });
    
    snackbar.show();
}

2. 调整onSupportNavigateUp()方法

因为你的onSupportNavigateUp()默认调用了onBackPressed(),所以上面修改完onBackPressed()后,这个方法不需要额外改动就能生效。如果需要单独处理这个导航返回逻辑,也可以用同样的回调思路:

@Override
public boolean onSupportNavigateUp() {
    // 先不直接调用返回
    // onBackPressed();

    final Snackbar snackbar = Snackbar.make(parent_view_chapter, "Redirecting to another page....please wait", Snackbar.LENGTH_SHORT);
    snackbar.addCallback(new Snackbar.Callback() {
        @Override
        public void onDismissed(Snackbar snackbar, int event) {
            super.onDismissed(snackbar, event);
            // 消失后执行页面返回
            onBackPressed();
        }
    });
    snackbar.show();
    return true;
}

关键说明

  • 为什么不能直接在snackbar.show()后立即跳转?因为SnackBar的显示是异步的,LENGTH_SHORT的时长虽然固定(约2秒),但如果直接在show后调用跳转,页面会立刻切换,SnackBar根本来不及展示给用户。
  • 使用Snackbar.Callback的onDismissed方法,能确保只有在SnackBar彻底消失后,才会执行后续的页面操作,完美匹配你的需求。
  • 要保证parent_view_chapter是当前页面中有效的View(比如根布局或者某个已加载的View),否则SnackBar会无法正常显示。

内容的提问来源于stack exchange,提问作者Nere

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:10:53