2015-02-24 8 views
0

У меня есть 3 фрагмента: A, B, C и ActionItem под названием Filters. Эти Filters должны быть видны только тогда, когда отображается фрагмент A.ActionItem появляется при изменении ориентации

Так я прячусь Filters когда B или C подставляется над A и восстановить их обратно, когда A заменяется обратно.

Это прекрасно работает, если я не изменю ориентацию экрана. Filters стать видно после этого.

Что есть я пробовал:

в деятельности, которая выступает за Фрагменты навигации переопределение проверить видимый Fragment и если его B или C я hideActionFilters():

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

//check if backStack empty 
if (getSupportFragmentManager().getBackStackEntryCount() != 0) { 
     //check top fragment by position and name in backstack 
     //LessonsFragment - B; SingleLessonFragment - C 
     if (getTopFragment().getClass().getName().equals(LessonsFragment.class.getName()) || 
       getTopFragment().getClass().getName().equals(SingleLessonFragment.class.getName())) { 
      hideActionFilterItem(); 
     } 
    } 

Это не работает , Метод hideActionItem():

private void hideActionFilterItem() { 
    View menuItemView = findViewById(R.id.action_filters); 
    if (menuItemView != null) { 
     menuItemView.setVisibility(View.GONE); 
    } 
} 

Пробовал отладки, он работает hideActionItem() но ActionItem все еще видны.

Также я пытался спрятаться в onPause(); в onConfogChanged() фрагмента B и C.

Возможно, у кого-то была такая проблема. Пожалуйста помоги.

P.S. Скажите, пожалуйста, нужен ли еще какой-то код. Спасибо

ответ

1

При изменении ориентации вид полностью воссоздается, поэтому вам необходимо обработать вашу ситуацию в onCreate().

Фрагмент, который будет отображаться, автоматически обрабатывается FragmentManager, но я думаю, что вам нужно «реагировать» каждый раз при создании представления, чтобы фильтры были скрыты. Я предлагаю вам посмотреть, есть ли фрагмент A, а если нет, вызовите метод hideActionItem():

public void onCreate(){ 
... 
//Get the Fragment A using the fragmentManager 
    FragmentA frag = (FragmentA) getFragmentManager().findFragmentByTag(the_tag_you_used_to_add_the_fragment); 
    if(frag!=null){ 
    if(!frag.isVisible()) 
     hideActionItem(); 
    } 
    else hideActionItem(); 
} 
Смежные вопросы