안녕하세요, 다른 Android 개발자,Wizard like DialogFragment-Chain
두 개의 DialogFragments를 연속적으로 사용하려고합니다. 따라서 두 번째 DialogFragments가 취소되면 두 번째 팝업 창이 취소됩니다. 이 취소됩니다 감지
내 DialogFragment에서void showFirstDialog() {
// Pass the context to do a callback
DialogFragment newFragment = ChangeDialogFragment.newInstance(mContext);
newFragment.show(getSupportFragmentManager(), "myFirstDialogTag");
}
나는 다음 한 코드 :
나는 다음과 같은 방법을 호출 내 활동에: 여기
는 내가 지금까지 무엇을 가지고@Override
public void onCancel(DialogInterface dialog) {
// Use Context to do a callback and inform the Activity that
// Fragment is cancelled
((Activity) mContext).firstDialogCanceled();
super.onCancel(dialog);
}
내 활동으로 돌아가서 두 번째 대화 상자를 시작하여 해당 이벤트에 반응합니다.
void firstDialogCanceled {
DialogFragment newFragment = InformationDialogFragment.newInstance();
newFragment.show(getSupportFragmentManager(), "mySecondDialogTag");
}
첫 번째 대화 상자에서 오리엔테이션을 변경하지 않는 한 완벽하게 작동합니다. 나는 일이있을 때 나는 다음과 같은 오류 얻을 :
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
이 예외가 라인에 발생을 "newFragment.show (에서 getSupportFragmentManager(),"mySecondDialogTag ");"
이 문제를 해결할 수있는 방법은 처음 대화 상자를 수동으로 닫는 것입니다. 나는 다음과 같이 시도했다 :
DialogFragment firstFragment = (DialogFragment) getSupportManager().findFragmentByTag("myFirstDialogTag");
firstFragment.dismiss();
다시 방향을 바꾸지 않고 모든 것이 잘 동작한다. 첫 번째 대화 상자가 화면에 표시되는 동안 오리엔테이션을 변경하면 "firstFragment.dismiss()"줄에 NullPointerException이 발생합니다.
왜 그런 일이 발생합니까? 왜 FragmentManager는 오리엔테이션 변경 후 DialogFragment를 잊어 버리고 왜 두 번째 것을 표시 할 수 없습니까? Android 레퍼런스는 다음과 같이 말합니다.
you should use show(FragmentManager, String) or show(FragmentTransaction, String) to add an instance of DialogFragment to your UI, as these keep track of how DialogFragment should remove itself when the dialog is dismissed.
나는 쇼를 사용하지만 여전히 제대로 작동하지 않습니다.
모든 힌트를 높이 평가합니다!
건배 Ali3n
I는 I가 발생 한 시간 "onSaveInstanceState 후이 작업을 수행 할 수 없습니다"고 말할 수 있습니다 구성 변경으로 인해 새로 작성된 활동 인스턴스가 아니라 이전/파괴 된 활동 인스턴스에 적용됩니다. – CommonsWare
당신은 나의 영웅입니다. 답변으로 게시하여 받아 들일 수 있습니다. –