2012-04-08 2 views
4

동일한 viewId를 사용하여 프래그먼트 A와 B에 대해 add()를 호출 한 다음 해당 프래그먼트 ID에서 replace()를 호출하려고하면 프래그먼트 A 만 제거되고 결국 종료됩니다 조각 B와 C와 함께. 문서에 따르면, 둘 다 A와 B는 C로 대체해야합니다 ... 아니면 내가 잘못 문서를 읽고 있습니까?프래그먼트 replace() 모든 프래그먼트를 대체하지 않음

가 여기에이 작업을 수행 한 조합이다 :

public class FragmentActivity extends SherlockFragmentActivity { 
    @Override 
    public void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 

     getSupportFragmentManager().beginTransaction().add(R.id.fragment, new FragmentA()).add(R.id.fragment, new FragmentB()).commit(); 

     ((Button) findViewById(R.id.swap)).setOnClickListener(new View.OnClickListener() {   
      @Override 
      public void onClick(final View view) { 
       getSupportFragmentManager().beginTransaction().replace(R.id.fragment, new FragmentC()).commit(); 
      } 
     }); 
    } 
} 
+1

코드를 표시 할 수 있습니까? –

+0

감사합니다. 스 니펫을 추가했습니다. –

답변

0

워드 프로세서 보면, .replace 매개 변수로 조각을 취하는 메소드를 호출합니다. 그래서 그것은 단지 하나의 조각을 대체하기위한 것임을 짐작할 수 있습니다. 나는 왜 당신이 처음에 동일한 id에 두 개의 단편을 추가하는지 이해하지 못합니다.

+0

나는 replace()라고 쓰여있는 write-up을 사용했다 : 이것은 동일한 containerViewId **로 추가 된 현재 추가 된 모든 조각들에 대해 remove (Fragment) **를 호출하는 것과 본질적으로 같다. , Fragment, String)을 사용합니다. –

+0

사과, 나는 그것을 놓쳤다. 그리고 나는 클래스 정의를 잘못 해석했다. 너무 빠른 시각에서. – Barak

관련 문제