0

나는 조각을 처리하는 활동이 있습니다. 나는 추가/조각을 교체하고 가기 backstack에 (여부)를 추가하려면 다음 방법을 만들어 : 이것은 다음과 같은 시나리오가 발생할 때까지 잘 작동조각 더미에서 이상한 동작

public void startFragment(CCFragment fragment, boolean addToBackStack) { 
    final String fragmentTag = fragment.getClass().getSimpleName(); 
    final FragmentManager fragmentManager = getSupportFragmentManager(); 

      // If my fragment is already in the backstack, I don't want to add 
      // it again, but go back to it: 
    boolean fragmentPopped=false; 
    if(fragmentManager.findFragmentByTag(fragmentTag)!=null){ 
     fragmentPopped=true; 
     fragmentManager.popBackStack(fragmentTag,0); 
    } 

      //If it is not, I want to add/replace it 
    if (!fragmentPopped) { 
     fragment.setFragmentDelegate(this); 
     FragmentTransaction fragmentTransaction = fragmentManager 
       .beginTransaction(); 
     fragmentTransaction.replace(CONTENT_VIEW_ID, fragment, fragmentTag); 
     if (addToBackStack) 
      fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 
    } 
} 

:

startFragment (거짓 F1을); // 뒤쪽에 아무것도 없음

startFragment (F2, true); // 백 스택의 F1

startFragment (F3, false); // 백 스택의 F1

startFragment (F1, false); -> 이것을 호출하면 "if"가 입력되고 popBackStack이 작동하지 않으므로 내 앱은 F1으로 돌아 가지 않고 F3에 머무르게됩니다. 뒤로 버튼을 누르면 앱이 F1으로 이동합니다 ...

그래서 내가 뭘 잘못하고 있니? 이름이 제대로 저장되어 있는지 확인했습니다.

답변

1
ft.addToBackStack(tag); 

나는 이것에 대해 확실하지 않지만, 백 스택에 frag를 추가 할 때, 다시 태그를 추가해야한다고 생각합니다. 코드에서는 태그를 제공하지 않고 null을 사용하므로 검색 할 태그가 없으며 원래 태그를 사용하더라도 null로 덮어 쓰게됩니다.

편집 : 다음 태그를 사용하여 백 스택에서 태그 이름과 일치하는지 확인합니다. 나는 여전히 귀하의 null이 그들을 덮어 씌우고 있다고 믿습니다.

FragmentManager mgr = getFragmentManager();     
BackStackEntry be = mgr.getBackStackEntryAt(mgr.getBackStackEntryCount()-1); 
String tag be.getName(); 

System.out.println("tag " + tag); 
+0

답장을 보내 주셔서 감사합니다. 그러나 이것은 문제가 아닙니다. findFragmentByTag 메소드는 fragmentTransaction.replace (CONTENT_VIEW_ID, fragment, fragmentTag) 메소드에서 제공되는 이름을 찾습니다. 나는 당신이 어쨌든 말을 시도하고 그것은 창피가 작동하지 않습니다. –

+0

backstack (태그)을 추가 할 때 설정된 백스 태 커리 이름으로 백 스택에서 조각을 가져옵니다. 내가 추가 한 위의 코드를 사용하여 백 스택 항목의 현재 이름을 확인할 수 있습니다. – NameSpace

+0

맞습니다! –