2013-11-04 2 views
0

내 응용 프로그램 중 하나에서 조각을 사용하는 데 문제가 있습니다. 앱은 일부 버튼을 누를 때 콘텐츠 조각이 대체되는 하나의 기본 프레임으로 구성됩니다 (탭 모양의 레이아웃으로 생각할 수 있음). 지금까지 모든 것이 정상적으로 작동하지만 프래그먼트를 전환 한 후에 프래그먼트 프레임의 전체 내용이 사라지는 경우가 있습니다. 이 문제를 해결하는 한 가지 방법은 앱을 배경으로 가져 오려면 앱 전환 버튼을 누른 다음 앱을 다시 포 그라운드로 다시 가져 오는 것입니다. 이것은 화면을 다시 그리는 것으로 보이며 다시 조각을 볼 수 있습니다.조각이 사라짐

뷰 계층 구조 덤프는 화면에서 볼 수있는 것과 동일합니다. 따라서 버그가 발생하면 조각 프레임이 비어 있지만 디버그 모드에서 레이아웃을 확인할 때 모든 것이 예상대로 작동합니다. 파편과 뷰는 올바르게 바뀌지 만 디스플레이에는 표시되지 않습니다.

이미 (표시/숨기기, 바꾸기, 추가/제거) 조각을 관리하는 여러 가지 방법을 시도해 보았습니다. 전체보기 트리를 숨기고 표시하거나 무효화하고 하드웨어 가속을 사용하지 않도록 설정했지만 해결 방법을 시도했지만 항상 동일하게 사용했습니다 결과.


편집 : requestet 일부 코드 예 제가 동일한 결과 단편을 숨기고/우선 단편을 첨가하고 도시 시도 현재 versionbut 경우 :

MainActivity의하지 OnCreate 첫번째 조각 추가는 (확장 FragmentActivity) :

final FragmentTransaction tx = getSupportFragmentManager().beginTransaction(); 
    tx.add(R.id.tabContent, new MyFirstTab()); 
    tx.commit(); 

변경 조각 (UI 스레드에서 호출 할 수 보장) :

private void changeTab(final Fragment tab) { 
FragmentManager fm = getSupportFragmentManager(); 
final FragmentTransaction tx = fm.beginTransaction(); 
tx.replace(R.id.tabContent, tab); 
tx.commit(); 
} 
,
+0

일부 코드를 올리면 도움이 될 수 있습니다. :) – MartinHaTh

+0

그것은 지금 고쳐 졌던 것처럼 보인다. .. 나는 그것을 내일 검증 할 것이다. 서비스 콜백에서 텍스트 필드를 업데이트하는 하위 구성 요소 중 하나에 조각이 있습니다. 이걸 제거한 후에 지금은 더 이상 사라지지 않는 전망을 얻었습니다 ... – Jan

답변

0

오케이 ... 충분히 자주 말할 수는 없네요 ... UI 쓰레드가 아닌 다른 쓰레드에서 UI를 조작하지 마시오. 그리고 aidl을 통한 서비스 콜백은 항상 UI 쓰레드에서 항상 호출되는 것은 아닙니다.