2015-02-24 24 views
0

我有3个片段:A, B, CActionItem调用Filters。这些Filters只有在分别可见片段A时才可见。ActionItem出现在方向更改

所以我躲FiltersBC被取代了A和它们恢复回来时A被替换回来。

工作正常,除非我改变屏幕的方向。之后变成可见的Filters

有什么我想:

其中代表片段导航覆盖活动我检查可见Fragment,如果它BChideActionFilters()

@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();在片段BConConfogChanged()中。

可能有人有这样的问题。请帮忙。

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(); 
}