2016-12-17 100 views
0

我很難找出Fragment實際顯示在屏幕上的情況,並在其他Fragment替換它時隱藏。意味着我需要知道可以提供幫助的方法。如何知道屏幕上顯示的片段[不在PagerAdapter中]?

到目前爲止,我已嘗試使用以下方法。這些方法甚至沒有調用。原因我不使用Fragments裏面的PagerAdaper(根據SO答案)。

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
} 

@Override 
public void onHiddenChanged(boolean hidden) { 
    super.onHiddenChanged(hidden); 
} 

@Override 
public void setMenuVisibility(boolean menuVisible) { 
    super.setMenuVisibility(menuVisible); 
} 

最後我試圖與

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
} 

他們都呼籲,但這裏的問題是onDetach後調用第二個片段的onAttach

所以不知何故,我什麼都沒有結束。

感謝您的閱讀!

回答

0

可能下面的方法是幫助你。它在視圖可見之後調用。

@Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
    } 

嘗試下面的代碼來隱藏片段。

final Fragment hideFragment = getFragmentManager().findFragmentById(R.id.container); 
     getFragmentManager() 
       .beginTransaction() 
       .add(R.id.container, fragment, fragment.getClass().getSimpleName()) 
       **.hide(hideFragment)** 
       .addToBackStack(hideFragment.getClass().getSimpleName()) 
       .commit(); 

當您使用.hide方法時,肯定會在下面的方法調用。

@Override 
    public void onHiddenChanged(boolean hidden) { 
     super.onHiddenChanged(hidden); 
    } 
+0

要知道'Show'狀態是好的,但隱藏狀態呢? –

+0

如果你使用transaction.add()和transaction.hide()方法,然後確定@Override public void onHiddenChanged(boolean hidden){ super.onHiddenChanged(hidden); } 這個方法會調用。 –

0

您可以使用isHidden()知道目前的狀態在Fragment生命週期回調的顯示。

也會在onHiddenChange(boolean)方法中調用狀態。附加片段時,其默認狀態爲SHOW,因此如果您想要調用onHiddenChange(boolean),前提是在使用事務時應明確調用show()/hide()

如此: getSupportFragmentManager().benginTranscation.add(...).show().commit();

1

使用onDetach上firstFragment和onActivityCreated上第二片段。

+0

漂亮!但問題是'onStop'在下一個'Fragment的onAttach'方法之後被調用。 –

+0

在第一個片段上使用onDetach,在第二個片段上使用onActivityCreated .. onActivityCreated將在第一個片段分離後調用。 –

+0

試試這個。它會幫助.. –