Кажется, что вы пытаетесь привести LinearLayout к RelativeLayout, но это не имеет особого смысла, так как изначально он работает в портретном режиме. Это может быть проблемой с вашим оператором if в onCreate (). Возможно, что ваша функция loadMBIIntoView () вызывается, когда этого не должно быть, вызывая ошибку.
Вы проверяете для deviceRotation == 1, но это ловит только случай, когда устройство поворачивается на 90 градусов, игнорируя случай, когда оно поворачивается на 270 градусов.
Попробуйте вместо этого и посмотрите, изменится ли что-нибудь:
if(deviceRotation == Surface.ROTATION_90 || deviceRotation == Surface.ROTATION_270)
{
...
}
else
{
...
}
Surface.ROTATION_90 - это предопределенная константа, равная 1, а Surface.ROTATION_270 - 3.
EDIT:
Я все еще думаю, что это проблема с вашим устройством. Ctrl + F11 переходит к «предыдущей ориентации макета», а Ctrl + F12 переходит к «следующей ориентации макета», как описано здесь . Поэтому, когда вы дважды нажимаете F11, вы не возвращаетесь к исходной ориентации. Вы переходите в перевернутый портретный режим.
Попробуйте нажать F11 в первый раз, а затем F12 во второй раз, чтобы эмулятор действительно вернулся в свое истинное исходное состояние и посмотрите, не вызывает ли это по-прежнему ошибку.
РЕДАКТИРОВАНИЕ № 2:
Кажется, это проблема (возможно, ошибка) с вращением эмулятора.
Подобный вопрос может быть найден здесь .
По сути, эмулятор выполняет дополнительные вызовы в течение жизненного цикла, а не реальные устройства. Предположительно, он имитирует вращение путем открытия клавиатуры вместо того, чтобы через акселерометр, как это делает реальное устройство.
Если вы можете, я бы протестировал ваш код на реальном устройстве, чтобы убедиться, что это законная проблема. Сейчас кажется, что это проблема с эмулятором, и вы должны ее игнорировать.