뭔가

2016-06-18 3 views
0

를 조각화 조각에서 탐색 할 때 나는이 응용 프로그램이 시작될 때 A는, B, C 그것이 조각 B조각 내가 이동하고있어에서 다음 주 조각을 보유하고 하나 개의 활동과 3 개 조각 및 단편 B to 단편 C. 코드가 작동하며 조각 B에서 조각 C을 열리지 만 먼저는 조각 그냥 다음 조각 C을 엽니 다. 왜, 어떻게 고칠 수 있습니까? 프래그먼트 B, C를 호스트하기 위해 하나 이상의 활동이 더 필요합니까? 단편 스위치뭔가

방법 :

private Fragment contentFragment; 
    public void switchContent(Fragment fragment, String tag){ 
     FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
     while (fragmentManager.popBackStackImmediate()); 
     if (fragment != null){ 
      FragmentTransaction transaction = fragmentManager 
        .beginTransaction(); 
      transaction.replace(R.id.content_frame,fragment,tag); 
      if (!(fragment instanceof FragmentB)){ 
       transaction.addToBackStack(tag); 
      } 
      transaction.addToBackStack(tag); 
      transaction.commit(); 
      contentFragment = fragment; 
     } 
    } 

R.id.content_frame 활동 된 setContentView에 사용되는 레이아웃의 ID이다.

+1

당신이 조각을 전환 할 필요가하여 FragmentTransaction 및 교체 방법이다. 그래서 아마도 스택 스택을 주석 처리하고 무슨 일이 일어날지를 보게 될 것입니다. –

답변

0

이것은 현재 조각을 다음 조각으로 바꾸기 전에 다시 조각에있는 모든 조각을 터뜨리기 때문에 발생합니다. 당신이 줄 필요하지 않습니다

는 :

while (fragmentManager.popBackStackImmediate()); 

또한,이 부분은 무의미 :

if (!(fragment instanceof FragmentB)){ 
    transaction.addToBackStack(tag); 
} 
transaction.addToBackStack(tag); 

마지막 줄이 조건을 무시하기 때문이다.

당신은 당신의 코드를 다음 방법을 편집하려고 다음, FragmentB 제외하고 스택을 백업하는 조각을 추가 할 경우

public void switchContent(Fragment fragment, String tag) { 
    if (fragment != null) { 
     FragmentTransaction transaction = fragmentManager.beginTransaction(); 
     transaction.replace(R.id.content_frame, fragment, tag); 
     if (!(fragment instanceof FragmentB)){ 
      transaction.addToBackStack(tag); 
     } 
     transaction.commit(); 
     contentFragment = fragment; 
    } 
}