2012-03-20 5 views
5
에서 조각을 제거하지 않습니다하여 FragmentTransaction에서 방법을 제거

나는 다음과 같은 문제가있다 :컨테이너

내 응용 프로그램은 다음과 태블릿에 탐색을 수행 할 필요가

:

+----+-------+ +----+-------+ +----+-------+ +----+-------+ 
| |  | | |  | | |  | | |  | 
| 1 | 2 | -> | 2 | 3 | -> | 3 | 4 | -> | 4 | ... | 
| |  | | |  | | |  | | |  | 
+----+-------+ +----+-------+ +----+-------+ +----+-------+ 

내가 사용이 네비게이션을 만들려고 내비게이션은 역동적이기 때문에이 탐색에서 얼마나 많은 레벨이 있는지 알 수 없습니다. 왼쪽 패널이 비어있는 경우, 그 안에 조각을 삽입

:

는 API 조각을 사용하여 동일한 조각을 여러 번 호출, 시험을 지원하기 위해 다음과 같은 구조를 만들었습니다. 왼쪽 패널이 비어 있지 않고 오른쪽 창이 비어 있으면 오른쪽 창에 조각을 삽입하십시오. 두 패널이 비어 있지 않으면 오른쪽 패널의 조각을 제거하고 왼쪽 패널을 대신 ​​사용하십시오. 그런 다음 새 조각을 오른쪽에 삽입하십시오.

문제는 바꾸기 방법을 수행하려고 할 때 "컨테이너 조각의 ID를 변경할 수 없습니다"라는 오류가 발견되었습니다.

트랜잭션의 제거 방법에 대한 설명서를 보면 다음 정보가 있습니다. "기존 조각을 제거하십시오. 컨테이너에 추가 된 경우 해당보기도 해당 컨테이너에서 제거됩니다."

그러나 API 코드 조각을 보면 이전 컨테이너 인 mFragmentId에 대한 참조가 포함 된 변수가 있습니다.

누구나이 탐색을 수행하거나이 변수를 재설정하는 방법을 알고 있습니까?

답변

2

은 내가이 문제에 대한 해결책을 찾은 것 같아요.

이 레이아웃의 방향은 수평이며, 새로운 Fragments가 항상 왼쪽에 추가됩니다.

그러나, 다음 코드를 사용하여 : 스택이 순서를 반대로, 제거 된 조각을 삽입하고 마지막 삽입 하나를 제거하기 때문에,

Frag1 frag1 = new Frag1(); 
frag1.setText("Fragment " + Integer.toString(navigation)); 
FragmentManager fm = getFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 
if (navigation > 2) { 
    ft.remove(fm.findFragmentByTag("f" + Integer.toString(navigation - 2))); 
} 
ft.add(R.id.Panes, frag1, "f" + Integer.toString(navigation)); 
if (navigation > 1) { 
    ft.addToBackStack(null); 
} 
ft.commit(); 

나는 가기 backstack에 문제가 있습니다.

이 문제를 해결하려면 트랜잭션 삭제를 숨기기로 변경했습니다. 그러나 성능상의 문제가 있는지 아직 알 수 없습니다.

ft.hide(fm.findFragmentByTag("f" + Integer.toString(navigation - 2))); 

저에게 적합합니다.

0

Fragments를 한 컨테이너에서 다른 컨테이너로 이동하는 대신 원하는 시각적 효과 (즉, 각 컨테이너가 다른 컨테이너의 위치에 있음)를 달성 할 수 있도록 Fragments 컨테이너의 필요한 레이아웃 매개 변수를 바꿉니다. 그런 다음 조각을 추가 할 때마다이 컨테이너 위치 교환 방법도 실행하십시오.

대신 레이아웃이, 나는 단지 하나를 사용합니다 :

+0

시도해 보았지만 나에게도 효과적 이었지만, 하나의 LinearLayout을 사용하는 또 다른 솔루션을 찾았습니다. 감사. –

관련 문제