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
相关产品推荐
相关产品推荐

