2015-02-24 46 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(); 
}