Изменение ориентации с использованием фрагментов - неправильное начало деятельности - PullRequest
2 голосов
/ 19 июля 2011

У меня есть приложение, которое использует фрагменты.В зависимости от размера экрана и ориентации я отображаю различные макеты:
1.layout-фрагмент - список вариантов
2.layout-фрагмент - отображение выбранного варианта
У меня проблема с обработкой изменения ориентации на большом экране.В портретном режиме я отображаю оба фрагмента в одном макете, но в альбомном режиме, если пользователь выбрал отображение, я показываю только 2-й фрагмент активности.Когда в этом состоянии ориентация переключается обратно в портретный режим, я хотел бы снова отобразить оба фрагмента, но вместо этого я снова отображаю 2-й фрагмент действия макета.
Я понимаю, что это управление активностью Android, но как лучше это сделатьработать так, как мне хотелось бы (всегда отображать 1 и 2 фрагмент в портретном режиме)?

Спасибо за любые предложения!

1 Ответ

0 голосов
/ 22 октября 2011

Это потому, что ваше второе действие (показывает только один фрагмент) воссоздается при смене ориентации.

Что вы можете сделать здесь, это проверить ориентацию в вашем onCreate, если портрет - запустите Activity_1 с подходящим намерением, чтобы он мог запустить второй фрагмент для получения правильных деталей. Естественно, вы также должны отредактировать Activity_1, чтобы проверить это намерение в onCreate ..

Пример кода, в котором у намерения есть действие ACTION_VIEW и uri для подробного объекта.

Activity_2 (один фрагмент - должен использоваться только в альбомной ориентации)

// in method onCreate
// assume orientation is checked and boolean set
if (isPortraitOrientation) {
   startActivity(suitableIntent); // ACTION_VIEW with uri
   finish();
   return;
} else {
   // load fragment
}

Activity_1 (показаны два фрагмента, если позволяет ориентация

// check intent
// assume orientation checked and boolean set  
final Intent intent = getIntent();
final String action = intent.getAction();
Log.v(TAG, " - action: " + action);
if (isPortraitOrientation && Intent.ACTION_VIEW.equals(action)) {
   // load fragment with selected choice
}

Рекомендуемая проверка ориентации: Проверка ориентации на телефоне Android

...