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

调用Snackbar.make仅MIUI12设备报No suitable parent found异常

问题根因

该报错是因为调用Snackbar.make()时传入的目标View已经与Window解绑,Snackbar无法找到可依附的父布局。仅在MIUI 12(Android 10)小米设备复现的原因是该版本MIUI对Activity返回时的Fragment生命周期调度、后台资源回收逻辑做了定制化修改,和原生Android及其他厂商ROM行为存在差异:当你从跳转的Activity回退到当前Fragment的瞬间,有概率出现Fragment绑定的根布局已经脱离Window的情况。

修复方案

  • 增加前置校验再调用Snackbar
    调用前先校验Fragment是否仍处于挂载状态、根布局是否已绑定Window,异常状态下直接跳过弹窗即可:
    if (isAdded() 
        && MainFragment.this.binding != null 
        && MainFragment.this.binding.getRoot().isAttachedToWindow()) {
        Snackbar.make(MainFragment.this.binding.getRoot(), data.getStringExtra("nextEvent"), Snackbar.LENGTH_LONG)
                .setAction("Action", null).show();
    }
    
  • 兜底使用Activity根布局
    不想丢失弹窗的话,可以直接用当前Activity的内容根布局作为Snackbar的依附载体,不受Fragment生命周期影响:
    View parentView = requireActivity().findViewById(android.R.id.content);
    Snackbar.make(parentView, data.getStringExtra("nextEvent"), Snackbar.LENGTH_LONG)
            .setAction("Action", null).show();
    
  • 兼容版本适配
    你的项目target SDK为26,该版本适配下MIUI的自定义行为触发概率更高,如有条件可将target SDK升级至30及以上,MIUI对高target SDK应用的生命周期调度会更贴近原生逻辑,可降低此类兼容问题出现概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:39:00