2017-04-26 9 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(); 
} 
> FragmentB (대체) -3210

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

는 총 조각

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

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

돌아 가기를 눌러 기능을 조각을 추가하고 흐름이 FragmentA입니다 (추가) ->

퀘스트 SION 1 : totalFragments가 2를 표시하는 이유는 무엇입니까? FragmentB를 A로 대체하는 동안

질문 2 : 두 개의 단편을 표시하는 뒤로 버튼을 계속 누르고 스택에서 어떻게 제거 할 수 있습니까?

질문 3 : FragmentB는 볼 수 있지만 FragmentA 조각의 수명주기가 너무 작업이 onResume을 ..means과에서 onCreate funcations 너무 이상한 요구하고 있지만

답변

0

질문 한 이유는 사실 그나마 알고 : 당신은 그러므로 어떤 조각 조각 수를 제거하지 않은 프래그먼트를 대체 할 때는 프래그먼트 컨테이너가 아닌 인스턴스로 대체됩니다.

질문 2 : 백 스택에 조각을 추가하면 다시 버튼을 누르면 되돌아갑니다. 조각이 제거되지 않았으므로 조각 관리자의 조각 수는 여전히 2가됩니다.

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

질문 3 : 당신이 조각 B와 단편 A를 교체하면, 단편 A가 계속 활성화되며 경우, 그것은 onPause, onDestroyonDestroyView의 호출 당신이 그것을 제거하려면 다음 코드는 트릭을 할 것입니다 다시 컨테이너로 가져 오면 수명주기가 onCreateView에서 시작합니다. 즉, onResume을 실행하는 것은 정상이지만, onCreate은 그렇지 않습니다.