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

View.Gone失效:级联菜单返回按钮隐藏后仍处于激活状态(线性布局)

解决级联菜单返回按钮View.Gone不生效的问题

嘿,我来帮你搞定这个问题!你遇到的情况很常见——动画和View可见性设置的时机没同步好,导致View.GONE看似没生效,按钮还在后台能被点击。咱们一步步来解决:

问题根源

你当前用固定200ms的Handler延迟来执行后续操作,但动画的实际时长可能和这个延迟不匹配。如果exitRight(dd)动画还没结束,你就设置dd.setVisibility(View.GONE),系统可能还在处理动画的视图状态,导致Gone的设置没有立即生效,按钮依然能接收触摸事件。

解决方案:用动画监听器替代固定延迟

不要依赖固定时间的延迟,而是监听动画的结束事件,在动画真正完成后再修改View的可见性,这样能保证状态同步:

/** CLICK SUL PULSANTE INDIETRO DA DASHBOARD */
dash_back.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // 先启动退出动画,同时设置监听器
        Animation exitAnim = exitRight(dd);
        exitAnim.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
                // 动画开始时的操作(可选)
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                // 动画结束后才执行状态变更
                dd.clearAnimation(); // 清除动画残留的状态影响
                dd.setVisibility(View.GONE);
                
                ll.setVisibility(View.VISIBLE);
                navigateRight(ll);
                section = "main";
                Toast.makeText(getApplicationContext(), "back", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
                // 动画重复时的操作(可选)
            }
        });
        dd.startAnimation(exitAnim);
    }
});

额外检查点

  • 确认exitRight动画的fillAfter属性:如果你的动画设置了fillAfter=true,记得在动画结束后调用clearAnimation(),避免动画的变换状态残留影响View的可见性。
  • 检查线性布局的层级:确保没有其他布局元素覆盖在dd上面,或者dd的父布局没有拦截触摸事件的异常逻辑。

这样修改后,返回按钮会在动画完全结束后才被设置为Gone,不会再出现后台激活的情况啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:28:11