0

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

Fragment fragment = null; 
     if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 
      fragment = new FragmentPortrait(); 
     } else { 
      fragment = new FragmentLandscape(); 
     } 

     if (fragment != null) { 
      addFragment(fragment, savedInstanceState == null); 
     } 

private void addFragment(Fragment fragment, boolean add) { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager 
       .beginTransaction(); 

     detachFragment("fragment"); 

     if (add) { 
      fragmentTransaction.add(R.id.layoutForFragment, fragment, 
        "fragment"); 
     } else { 
      fragmentTransaction.replace(R.id.layoutForFragment, 
        fragment, "fragment"); 
     } 

     fragmentTransaction.commit(); 
    } 

private void detachFragment(String fragmentTag) { 
     Fragment fragment = getSupportFragmentManager().findFragmentByTag(
       fragmentTag); 

     if (fragment != null) { 
      Log.i(TAG, "detaching"); 
      getSupportFragmentManager().beginTransaction().remove(fragment) 
        .commit(); 
     } 
    } 

Моя проблема заключается в том, что если бы я начал свою деятельность в портретном режиме, и когда я поворачиваю экран фрагмент ландшафта показан как ожидается, но onActivityCreated в фрагменте портрета называется также. Это означает, что фрагмент портрета все еще существует. Можете ли вы сказать мне, где моя ошибка?

+1

Вам не нужно отделять фрагменты вручную. Просто попробуйте заменить их. – eleven

ответ

0

Keep it simple :: Replacing Fragment = Removing Current Fragment + Adding New Fragment


Sample :: Изменить к вашим потребностям с saveInstance и другими вещами


Boolean mFlag=false; 
{ 
     Fragment fragment = null; 

     if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 
     if(mFlag==false) 
      FragmentPortrait(); 
      mFlag=true; 
     } else { 
     if(mFlag==true) 
      FragmentLandscape(); 
      mFlag=false; 
     } 

     FragmentPortrait(){ 
     // Perform Action:: Replacing a fragment with the fragment you want to add in Portrait 
     } 

     FragmentLandscape(){ 
     // Perform Action:: Replacing a fragment with the fragment you want to add in Landscape 
     } 

} 
+0

У меня раньше не было метода отсоединения, но я заметил эту проблему и попытался с ней, но она все еще не работает. Я исправлю свой код, но можете ли вы сказать мне, когда я меняю (например) с портрета на пейзаж, почему также называется onActivityCreated из портрета? – definera

+0

@ Crash-ID .... 'onActivityCreated' будет вызываться, так как фрагмент уничтожается и создается! ....... Но я понятия не имею, почему «OnOrientation» меняется от портрета к ландшафту, почему также называется «onActivityCreated» портрета ........ Если вы хотите предотвратить эту попытку, ограничившись используя 'flags' ... Поскольку глобальные переменные не уничтожаются в классе' OnOrientation'! ...... Проверьте редактирование !! .... надеюсь, что это поможет ... 'Примечание-' Измените настройку флага в соответствии с вашими потребностями! – Devrath

Смежные вопросы