在Android 3.0以後,Google官方推薦使用DialogFragment代替Dialog使用,但是這個有個bug,就是DialogFragment調用show方法會出現
Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
這個惡心的錯誤,如何解決呢?
解決方案就是寫一個基類繼承DialogFragment
public class ResolveShowBugDialogFragment extends DialogFragment {
@Override
public void show(FragmentManager manager, String tag) {
try {
FragmentTransaction ft = manager.beginTransaction();
ft.add(this, tag).addToBackStack(null);
ft.commitAllowingStateLoss();
} catch (IllegalStateException e) {
}
}
boolean mIsStateAlreadySaved = false;
boolean mPendingShowDialog = false;
@Override
public void onResume() {
onResumeFragments();
super.onResume();
}
public void onResumeFragments() {
mIsStateAlreadySaved = false;
if (mPendingShowDialog) {
mPendingShowDialog = false;
showSnoozeDialog();
}
}
@Override
public void onPause() {
super.onPause();
mIsStateAlreadySaved = true;
}
private void showSnoozeDialog() {
if (mIsStateAlreadySaved) {
mPendingShowDialog = true;
} else {
FragmentManager fm = getFragmentManager();
ResolveShowBugDialogFragment snoozeDialog = new ResolveShowBugDialogFragment();
snoozeDialog.show(fm, "BaseDialogFragment");
}
}
}
參考連結: https://stackoverflow.com/questions/14262312/java-lang-illegalstateexception-can-not-perform-this-action-after-onsaveinstanc