호환성 라이브러리를 사용하여 코드를 Honeycomb에 이식 중입니다. 미리 이식 된 코드는 다음과 같이 작동합니다. 활동 A, B 및 대화 상자 D1 및 D2가 있습니다. B에는 다른 곳에서 메시지를 수신하는 메시지 처리기가 있습니다.조각에서 호출 할 때 DialogFrament 대화 상자가 잘못된 순서로 표시됩니다.
A는 메시지 (1)에서 showDialog를 호출하여 D1을 표시하는 B를 호출합니다. 그런 다음 사용자가 이미 D1을 기각하지 않은 경우 메시지 (2) 다음과 같은 코드를 사용하여 기각 된 후 D2가 표시됩니다
if (D1.isShowing()) {
D1.dismiss();
}
이 잘 작동합니다.
이식 된 코드 A는 Fragment, FB (메시지 처리기 포함)를로드하고 DialogFragment에서 파생 된 D1 및 D2를로드합니다. 대화 상자를 사용하여 표시되도록 내 코드를 수정했습니다 :
dlg.show(fragmentManager, tag);
위의 검사를 통해 수행됩니다
if (D1.isVisible()) {
D1.dismiss();
}
그러나,이 작동하지 않습니다. D2가 먼저 표시되고 나서 해고되면 D1이 표시됩니다. 위의 확인이 이루어질 때 D1이 보이지 않고 D2가 스택의 맨 위에 추가되어 처음 나타나는 이유 (D2의 onCreateView는 D1보다 먼저 호출 됨) 때문에 가정합니다.
는 지금은 아무 소용이 여러 가지를 시도했다 : D1은 스택에있는 경우1) 트랜잭션 매니저를 받고 확인하여 가시성을 확인합니다. 2)를 사용하여 대화 상자를 표시 : 일종의 않습니다) 이제
FragmentManager fm = fragment.getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.remove(fragment.D1tag).ft.commit();
3 :
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(0, dlg);
ft.commit();
또는 대체 사용/제거 대신 visibity 확인할 때
3) 다음을 수행 추가 그렇지 않은 경우를 제외하고는, 특정의 환경 (예를 들어, 다이얼로그를 조기 해방)으로 fragment가 발견되지 않기 때문에, illegalStateException가 Throw됩니다.
이 문제를 어떻게 해결할 수 있는지 또는 실제로 완전히 잘못된 생각을하고 있는지, 아니면 활동이 대화 상자의 수명주기를 제어해야하는지에 대한 아이디어가 있습니까? 내 벌집 앱 활동 B는 FB를로드하는 래퍼 활동이므로 A와 B의 라이프 사이클 관리 코드를 모두 복제하고 싶지는 않습니다.
미리 감사드립니다. 베드로.