Android 在我第一次从其他活动返回时,不会调用OnConfiguration Changed

Android 在我第一次从其他活动返回时,不会调用OnConfiguration Changed,android,orientation,screen-orientation,orientation-changes,onconfigurationchanged,Android,Orientation,Screen Orientation,Orientation Changes,Onconfigurationchanged,我有以下问题:我有一个图像,我想消失,当我改变我的手机从纵向到横向。当我在当前活动中移动方向时,它工作得非常好。如果我参加另一项活动并回来,它也可以完全正常工作。但问题是,在我返回主页面后,在我第一次更改方向时不会调用OnConfiguration Changed()。返回时,图像将正确显示/不正确显示,但返回后第一次更改方向时,将不会调用OnConfiguration Changed(),并且图像将保留/不保留,直到第二次更改方向。非常感谢你们的帮助! 这是我代码的两部分。我已经将config

我有以下问题:我有一个图像,我想消失,当我改变我的手机从纵向到横向。当我在当前活动中移动方向时,它工作得非常好。如果我参加另一项活动并回来,它也可以完全正常工作。但问题是,在我返回主页面后,在我第一次更改方向时不会调用OnConfiguration Changed()。返回时,图像将正确显示/不正确显示,但返回后第一次更改方向时,将不会调用OnConfiguration Changed(),并且图像将保留/不保留,直到第二次更改方向。非常感谢你们的帮助! 这是我代码的两部分。我已经将configChange-orientation权限放在清单中了,所以这不是问题

    @Override
    public void onConfigurationChanged(Configuration newConfig) {L.p("configList",5200184);
        super.onConfigurationChanged(newConfig);

        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE&&isVertical==true) {

            Logo.setVisibility(ImageView.GONE);
            mainLogo.setVisibility(ImageView.GONE);
            isHorizontal=true;

        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT&&isHorizontal==true){

            Logo.setVisibility(ImageView.VISIBLE);
            mainLogo.setVisibility(ImageView.VISIBLE);
            isVertical=true;
        }
      }




    @Override
    protected void onResume() {L.p("onResumeList", 5200113);
        super.onResume();
        Context ctx = getApplicationContext();
  WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
  Display display = wm.getDefaultDisplay();

        if((display.getOrientation() == Surface.ROTATION_90) || (display.getOrientation() == Surface.ROTATION_270))
            {//Horizontal
            L.p("you are resuming horizontal",5200124);
            Logo.setVisibility(ImageView.INVISIBLE);
    mainLogo.setVisibility(ImageView.INVISIBLE);    
    isHorizontal=true;
    //isVertical=false;
            }
        else {//Vertical
            L.p("you are resuming vertical",5200131);
    Logo.setVisibility(ImageView.VISIBLE);
    mainLogo.setVisibility(ImageView.VISIBLE);
    isVertical=true;
  //    isHorizontal=false;
    }
        tracker.trackPageView("/deviceList");
    }

谢谢

无需覆盖方向更改。只需在
layout land
文件夹中声明一个新的布局文件,该文件不包含图像(或图像设置为不可见/消失)。更改方向时,您的活动将在onCreate中加载该布局。

为什么要选中isHorizontal和isVertical?
是否有可能其中一个为false并导致其在if条件下失败?

除非在
AndroidManifest.xml
中的
下声明相应的属性,否则将不会调用
onConfigurationChanged()
方法:

android:configChanges="orientation"

可能是某个地方的标志导致了问题。不幸的是,如果没有看到完整的代码,我们可能永远不会知道问题出在哪里

但是,请不要使用configChange黑客。(这是一个非常罕见的情况下,当它是好的很好的解释。)


最有可能的是,这里根本不需要重写onConfigurationChanged方法。当在配置更改中重新创建活动时,请为其创建不同的布局。

否这些布局肯定可以正常工作。我只是把它们作为一个额外的保护装置,在恢复后再次检查它是否正确地知道先前的方向。一切正常,只是在我第一次返回活动并更改手机方向时,方向更改未被识别,在调用OnConfiguration Changed之前,我必须更改方向两次。不过谢谢你,还有其他想法吗?我听说这是个坏习惯,不过谢谢你的提示。我只是想知道为什么在我从另一个活动返回后第一次更改方向时不调用OnConfiguration Changed()。如果我将其从水平移动到垂直,图像仍然会消失。但后来我又回到了水平方向,然后是垂直方向,它看起来就像它应该的那样。我个人从来没有听说过布局-*文件夹是“坏习惯”。有什么关于为什么会被认为是这样的吗?@tdevoy与使用配置更改进行黑客攻击相比,制作单独的布局要好得多。是的,这不是问题所在。问题是,当我从另一个活动返回时,OnConfiguration Changed()在我第一次更改方向时不会被调用,但此后每次都会被调用。你对此有什么想法吗?不太清楚原因,但你是否手动设置了活动方向?如果是这样,该方法也将无法正确调用。我建议您创建一个新的Android项目,不要放置任何代码而不是onConfigurationChanged()和startActivity(),这样您就可以观察其行为。永远不要仅仅因为可以,就使用configChange。查看亚当的精彩评论。在Android开发者停止这样做之前,我不会休息@维克多旺基也有同样的问题。你把它修好了吗?