2012-01-27 84 views
2

我想了解片段中的不良行爲:即使片段在佈局中不可見,也會調用onCreateViewonActivityCreated方法。刪除容器時不會刪除動態添加的片段

如果使用的代碼:

TestFragment testFragment = new TestFragment(); 
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.add(R.id.fragmentDetail, testFragment, "test"); 
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
ft.commit(); 

ID爲fragmentDetail與片斷取代的FrameLayout然後就旋轉設備,片段方法仍然調用即使容器未在肖像了呈現佈局。如果您使用'靜態'<fragment>標記,則不會發生這種情況。 如果您使用靜態片段,則片段方法在片段出現時被調用。是否有可能在不使用片段標籤的情況下實現相同的行爲?如果不在佈局中,我需要一種避免渲染片段的方法。

謝謝

+0

這個問題可能是有用的http://stackoverflow.com/questions/6164341/handling-orientation-changes-with-fragments – 2012-01-27 22:25:09

回答

2

我找到了一個解決辦法。這是從建議Handling orientation changes with Fragments略有不同:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
    if (!fragment.isInLayout() && container == null) return null; 
    ... 
    } 

這樣就可以避免的情況下,當片段靜態投入佈局(在這種情況下,容器是空,但該方法isInLayout()返回true 順便說一下,這對我來說仍然很奇怪。

0

AFAIK,片段工作幾乎作爲活動。他們有相同的生命週期。 http://developer.android.com/reference/android/app/Fragment.html#Lifecycle所以,如果你沒有提及它們,它不會讓它們靠近。它們被系統引用並自行生存。所以,你應該以某種方式完成它們。

+0

是的,我想刪除沒有出現在肖像中的片段,但我不知道如何。 – Matroska 2012-01-27 21:52:14

+0

通過FragmentManager刪除片段 – Gangnus 2012-01-27 21:59:42

+0

popBackStack(String名稱,int標誌) 從管理器的片段回棧中彈出最後一個片段轉換。 – Gangnus 2012-01-27 22:02:14