2017-04-26 64 views
0

這個問題有很多答案,但從技術上講,我的問題是不同的,我已經閱讀了一些文檔,並同意我們不應該在一個活動中使用多個片段,我們應該使用多個活動片段取決於項目要求或UI規範, 所以我的應用程序的體系結構是 1 BaseActivity和所有活動從 2. BaseFragment延伸,所有碎片從 伸出我的代碼:使用片段的最佳方式

在BaseActivity我做以下功能

public void replaceFragment(int containerViewId, Fragment fragment, String fragmentTag, boolean addToBackStack) { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.replace(containerViewId, fragment, fragmentTag); 
    if(addToBackStack) 
     fragmentTransaction.addToBackStack(fragmentTag); 
    if(fragmentTag.matches("") && addToBackStack) 
     fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 
} 

要FrameLayout裏添加片段

public void addFragment(int containerViewId, Fragment fragment, String fragmentTag, boolean addToBackStack, boolean isPending) { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.add(containerViewId, fragment, fragmentTag); 
    if(addToBackStack) 
     fragmentTransaction.addToBackStack(fragmentTag); 
    if(fragmentTag.matches("") && addToBackStack) 
     fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 
    if(isPending) 
     fragmentManager.executePendingTransactions(); 
} 

返回按功能

public void popBackStackImmediate() { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fragmentManager.popBackStackImmediate(); 
} 

獲得總片段

public List<Fragment> fragmentList(){ 
    return getSupportFragmentManager().getFragments(); 
} 

和流量 FragmentA(添加) - > FragmentB(替換) - >

QUET SION 1:爲什麼totalFragments顯示2?而我已經將FragmentB替換爲A

問題2:當我按回顯示2片段的按鈕時,我如何從堆棧中刪除?

問題3:FragmentB是可見的,但FragmentA片段生命週期的工作太..means的onResume和的onCreate funcations呼籲太奇怪了,但真正的不知道爲什麼

回答

0

問題1:您尚未解除,因此任何片段的片段計數是2.當你替換一個片段時,你將它替換爲片段容器,而不是實例。

問題2:一旦你添加一個片段到堆棧,這意味着你將導航回到它,一旦你點擊後退按鈕。儘管如此,你的片段管理器片段數仍然是2,因爲沒有片段被刪除。如果你想刪除它下面的代碼將這樣的伎倆:

getSupportFragmentManager().beginTransaction().remove(yourFragment).commit(); 

問題3:一旦你與B片段取代片段A,片段A將仍然有效,並調用它的,onDestroyonDestroyView,如果你把它帶回它啓動它的容器的生命週期從onCreateView,這意味着運行onResume是正常的,但onCreate不是。