2013-12-04 3 views
2

Я реализую приложение, которое имеет два макета для пейзажного и портретного режима. Расположение для ландшафта находится в макет-земля. У меня есть fragment1 для портретного макета и fragment2 для пейзажных макетов. Я переопределяю onCreateView в каждом фрагменте.Android: метод фрагмента onCreateView снова после изменения ориентации

У меня есть статическая переменная, чтобы знать текущий фрагмент. Я оспаривался в onCreateView (1 для фрагментов 1 и 2 для фрагмента2).

Моя проблема в том, что статическое значение остается равным 1, когда ориентация является ландшафтным режимом.

Я отлаживал ориентацию приложения. Когда я меняю ориентационный портрет на пейзаж, сначала вызывается метод onCreateView фрагмента2, а затем снова вызывается метод onCreateView фрагмента1. Статическое значение переопределено.

Не знаю, почему fragment1onCreateView метод вызова после fragment2 называется? Я хочу назначить правильное значение для правого фрагмента.

Извините за мой плохой английский.

Спасибо.

ответ

1

Вам необходимо сохранить пакет и выполнить переопределение метода onsavedinstance, чтобы активность не создавалась.

Сначала, когда ориентация изменена, андроид проверяет сохраненную в ожидании и вызывает методSavedInstanceState, если он реализован.

0

Внутри OnCreate каждого фрагмента вы должны вызвать

getActivity().setRequestedOrientation(requestedOrientation) 
0

Вы должны иметь два специальных Fragment реализации, если ваши фрагменты имеют различную «бизнес-логику» в пейзаже и портрете. Если у них только другой макет, используйте 1 реализацию фрагмента и создайте 2 макета, по одному для каждой ориентации.

Создайте свой Fragments в Activity.onCreate(). Но не сохраняйте текущий Fragment в статической переменной. Вместо того, чтобы спросить FragmentManagerFragment если уже был добавлен:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Fragment myFragment = getSupportFragmentManager().findFragmentByTag("myTag"); 
    if(myFragment == null){ 
     //no Fragment has been added 
     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
     transaction.add(new MyFragment1(), "myTag"); 
     transaction.commit(); 
    }else{ 
     //the fragment has been added already, possibley before orientation change 
     //you could check its type and replace it 
     if(fragment instanceof MyFragment1){ 

     }else if(fragment instanceof MyFragment2{ 

     } 
    } 
} 
1

Вам не нужен, чтобы сохранить что-нибудь! Просто позвольте вашей деятельности справиться с изменением ориентации. В AndroidManifest.xml положите это

<activity 
     android:name=".MainActivity" 
     android:configChanges="orientation|screenSize" > 
    </activity> 
Смежные вопросы