2014-01-30 2 views
13

I가되는 I는 다음과 같은 방법을 사용하여 단편을 전환하고 활성을 가지고FragmentManager에서 이전 백 스택 항목을 제거하는 방법은 무엇입니까?

public void setCurrentFragment(Fragment fragment) { 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.setCustomAnimations(R.anim.slide_left_right_in, R.anim.slide_left_right_out, R.anim.slide_right_left_in, R.anim.slide_right_left_out); 
    transaction.replace(R.id.contentFrameLayout, fragment, Integer.toString(fragmentId++)); 
    transaction.addToBackStack(Integer.toString(fragmentId)); 
    transaction.commit(); 
} 

내 탐색 스택은 다음과 같다 :

N-2 -> N-1 -> N

때 특정 단편 N이 '열림'입니다. 이전 단락 (N-1)이 뒷받침에서 제거되기를 원하므로 '뒤로'를 누르면 N-2 단편을 복원해야합니다.

N 조각에서 FragmentManager.popBackStack (..)을 호출하면 N 및 N-1 조각이 제거됩니다.

N 조각으로 전환하기 전에 N-1 조각에서 popBackStack (..)을 호출하려고했습니다. 그러나이 경우 N-2 단편이 다시 시작되고 그 후에 N 단편이 표시됩니다.

내 질문은 : 현재 조각을 팝핑하지 않고 백 스택에서 이전 조각을 제거 할 수있는 방법이 있습니까?

+0

같은 문제에 직면 한 것과 같은 해결책이 있습니까? –

답변

1

public abstract void popBackStack (int id, int flags)을 백 스택에 사용하십시오. 예를 들어 this 을 확인 getSupportFragmentManager().popBackStack(fragmentId,0);

+5

나는 이미 그것을 시도했다, 그것은 또한 나의 현재 조각을 backstack에서 제거한다. 설명서에 따르면 '모든 스택 상태를 주어진 식별자로 팝 상태로 팝합니다. ' – nemezis

0

당신이) (을 커밋 addToBackStack() 방법을 사용하여 직접 를 호출하지 않습니다 위의 하나 다른 방법을 사용할 수 있습니다;

관련 문제