2013-06-10 6 views
0

알아볼 수없는 매우 이상한 오류가 있습니다.2 개 이상의 조각이있는 Android addToBackStack()

1 개의 주요 단편과 많은 2 차 단편을 가지고 있습니다. A -> (B, C, D, E, F) 조각 A는 항상 백 스택에 쌓여 야하지만 조각 B, C, D, E는 바뀌어야합니다.

나는이 작업을 수행하는 코드 줄을 사용 : 나는 조각 B에 조각 A로부터 이동하고 반격 버튼 모든 것이 제대로 작동하는지

getFragmentManager().executePendingTransactions(); 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    MyFragment mListFragment = new MyFragment(); 
    transaction.replace(R.id.listFragmentPlaceHold, mListFragment, FRAGMENT_TAG); 
    if(getFragmentManager().getBackStackEntryCount() == 0) 
      transaction.addToBackStack(null); 
    transaction.commit(); 

문제는 이것이다. 나는 내가 좋아하는만큼 이것을 할 수있다.

그런 다음 A-> B로 이동 한 다음 B를 몇 번 A -> (B, C, D)로 전환하고 다시 히트하면 여전히 좋은 상태가되어 다시 A로 돌아갑니다. 위의 작업을 수행 한 다음 다시 시도합니다. 나는 다시 A -> B에서 (다시 시작하지 않고) 활동을 시작한 다음 B를 C, D로 전환 한 다음 다시 공격한다. 단편 A는 더 이상 존재하지 않으며 Null Pointer Exception을 얻는다.

누군가 나를 도와주세요, 이것이 나를 미치게합니다.

나는 조각 A.

감사합니다 참조하기 전에 항상 getFragmentManager().executePendingTransactions();를 사용!

+0

문제는 [이] (http://stackoverflow.com/a/14283203/1079311)과 유사한 수 있습니다을 그러나 그들의 해결책은 도움이되지 못했습니다. – AlexIIP

답변

0

그래서 thisthis 게시물을 읽은 후, 나는 내가 replace()라고하면 따라서 뷰와 관련된 내 경우 프래그먼트에서 조각의 onDestroy() 메소드를 호출한다 replace() 전화 remove()이 보장 조각이이 없다는 것을 깨달았 A는 여전히 존재할 것이며 다시 생성되지 않을 것입니다. 따라서 대신 문제를 해결하기 위해 detach()을 사용했습니다.

나의 이해는 잘못 될 수있다 ...하지만이 문제가 해결 되었습니까 :

getFragmentManager().executePendingTransactions(); 
MyFragment1 mListFragment1 = 
      (MyFragment1) getFragmentManager().findFragmentByTag(MY_FRAG1); 
FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
MyFragment mListFragment = new MyFragment(); 
transaction.replace(R.id.listFragmentPlaceHold, mListFragment, FRAGMENT_TAG); 
if(getFragmentManager().getBackStackEntryCount() == 0){ 
     transaction.detach(mListFragment1); 
     transaction.add(R.id.listFragmentPlaceHold, mListFragment, FRAGMENT_TAG); 
     transaction.addToBackStack(null); 
}else{ 
     transaction.replace(R.id.listFragmentPlaceHold, mListFragment, FRAGMENT_TAG); 
} 
transaction.commit(); 
관련 문제