嗨夥計Android開發者,Wizard like DialogFragment-Chain
我嘗試在一行中有兩個DialogFragments,所以當第一個被取消時,第二個彈出。
這是我到目前爲止有:
在我的活動我調用下面的方法:
void showFirstDialog() {
// Pass the context to do a callback
DialogFragment newFragment = ChangeDialogFragment.newInstance(mContext);
newFragment.show(getSupportFragmentManager(), "myFirstDialogTag");
}
在我DialogFragment我有下面的代碼來檢測,這將被取消:
@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();
再次沒有一個方向更改everyhting工作正常。當第一個對話框出現在屏幕上時,我的方向發生了變化,在「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
我可以告訴你,我也遇到過多次「無法的onSaveInstanceState後執行此操作」是因爲我試圖做一些事情在舊/已銷燬的活動實例上,而不是由於配置更改而新創建的實例。 – CommonsWare
你是我的英雄:)發佈它作爲答案,所以我可以接受它。 –