getConfiguration (). Ориентация не работает в Android Fragment

Я пытаюсь получить ориентацию экрана в фрагменте Android с помощью getResources (). GetConfiguration (). Ориентация, но он возвращает тот же результат, хотя Я повернул устройство в портретный и альбомный режимы. Я также использовал в onConfigurationChanged () (см. Код ниже), и конфигурация, полученная в качестве параметра, сообщает об ориентации экрана corect, но общий метод получения ориентации экрана всегда сообщает тот же режим ориентации, в котором началась деятельность (альбомная или портретная) .

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
        Log.e(TAG, "NEW CONFIG: ORIENTATION_LANDSCAPE");
    else
        Log.e(TAG, "NEW CONFIG: ORIENTATION_PORTRAIT");

    Configuration config = getResources().getConfiguration();
    if(config.orientation == Configuration.ORIENTATION_PORTRAIT)
        Log.e(TAG, "config: PORTRAIT");
    else
        Log.e(TAG, "config: LANDSCAPE");


    LayoutInflater inflater = LayoutInflater.from(getActivity());
    populateViewForOrientation(inflater, (ViewGroup)getView());
}

Например, если действие было запущено в режиме ландшафта, первым выводом журнала будет:

1.a "НОВАЯ КОНФИГУРАЦИЯ: ORIENTATION_LANDSCAPE"

1.b "config: ПЕЙЗАЖ"

после поворота устройства в портретный режим:

2.a "НОВАЯ КОНФИГУРАЦИЯ: ORIENTATION_PORTRAIT"

2.b "config: ПЕЙЗАЖ"

Как вы можете заметить, конфигурация сообщает об одном и том же режиме ориентации, хотя устройство имеет другой режим ориентации.

Так что же здесь происходит? Спасибо! :)


person Ispas Claudiu    schedule 09.03.2016    source источник
comment
В моем случае он работает нормально, не могли бы вы переместить второй IF в функцию onCreate и посмотреть, что произойдет?   -  person Abdul Aleem    schedule 09.03.2016
comment
Если я переместу его в onCreateView (...), он сработает. Но как я уже упоминал в вопросе. Первый вызов метода возвращает правильную ориентацию (как в onCreateView), но после того, как я меняю ориентацию и вызывается onConfigurationChanged (...), метод сообщает о том же режиме ориентации, даже если ориентация изменилась.   -  person Ispas Claudiu    schedule 09.03.2016


Ответы (1)


Иногда простое решение - не бороться с системой, а просто принять факты такими, какие они есть. Просто обновляйте конфигурацию по мере их изменения.

Попробуй это:

private Configuration configuration;

private int getOrientation(){
    return getConfiguration().orientation;
}

private Configuration getConfiguration(){
    if (configuration == null) {
        configuration = getResources().getConfiguration();
    }
    return configuration;
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    configuration = newConfig;
}
person Ilya Gazman    schedule 05.12.2016