onConfigurationChanged не вызывается в первый раз, когда я возвращаюсь из другого действия - PullRequest
3 голосов
/ 15 февраля 2012

У меня следующая проблема: у меня есть изображение, которое я хочу удалить, когда я переключаю свой телефон с портретного на альбомный.Он отлично работает, когда я занимаюсь текущей деятельностью и меняю ориентацию.Это также работает совершенно нормально, если я иду на другой вид деятельности и возвращаюсь.Но проблема в том, что после того, как я вернусь на свою главную страницу, onConfigurationChanged () не будет вызываться при первом изменении ориентации.Изображение будет отображаться / не показываться правильно, когда я вернусь, но при первом изменении ориентации после возврата onConfigurationChanged () не будет вызываться, и изображение будет оставаться / не оставаться до тех пор, пока я не изменю ориентацию во второй раз.Ребята, мы будем очень признательны за любую помощь!Вот пара частей моего кода.Я уже добавил в манифест разрешение на ориентацию configChange, так что это не проблема.

    @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");
    }

Спасибо!

Ответы [ 4 ]

0 голосов
/ 13 августа 2014

Возможно, где-то есть флаг, вызывающий проблему.И мы, вероятно, никогда не узнаем, в чем проблема, не увидев полный код, к сожалению.

Но, пожалуйста, не используйте взломы configChange.(https://plus.google.com/109306462100800920982/posts/LuYGURGdX7Q для хорошего объяснения крайне редкого случая, когда все в порядке.)

Скорее всего, метод onConfigurationChanged здесь вообще не нужно переопределять.Создайте другой макет для повторного создания Действия при изменении конфигурации.

0 голосов
/ 15 февраля 2012

Почему вы проверяете горизонтальный и вертикальный?Возможно ли, что один из них является ложным, и это вызывает сбой условного условия?

0 голосов
/ 15 февраля 2012

Метод onConfigurationChanged() не будет вызван, если вы не объявили соответствующие атрибуты в <activity> в AndroidManifest.xml:

android:configChanges="orientation"
0 голосов
/ 15 февраля 2012

Нет необходимости отменять изменение ориентации. Просто объявите новый файл макета в папке layout-land, который не включает изображение (или в котором изображение установлено как невидимое / пропало). При изменении ориентации ваша деятельность будет загружать этот макет в onCreate.

...