StackOverflow上有几个问题,但不包含DialogFragment。通常的解决方案是使用commitAllowingStateLoss()
代替commit()
。但是我如何为DialogFragment
实现这一目标?
以下是show()
DialogFragment
方法的代码。它上面有ft.commit()
但我无法将其更改为commitAllowingStateLoss()
public void show(FragmentManager manager, String tag) {
mDismissed = false;
mShownByMe = true;
FragmentTransaction ft = manager.beginTransaction();
ft.add(this, tag);
ft.commit();
}
这是我如何实施DialogFragment
public class ProgressFragment extends DialogFragment {
private String message;
public static ProgressFragment getInstance() {
return new ProgressFragment();
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
ProgressDialog progressDialog = new ProgressDialog(getActivity());
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(true);
progressDialog.setMessage(message);
return progressDialog;
}
public void show(String message, FragmentManager manager, String tag) {
this.message = message;
show(manager, tag);
}
}
答案 0 :(得分:0)
请参见On showing dialog i get "Can not perform this action after onSaveInstanceState":
public class ProgressFragment extends DialogFragment {
@Override
public void show(FragmentManager manager, String tag) {
try {
FragmentTransaction ft = manager.beginTransaction();
ft.add(this, tag);
ft.commit();
} catch (IllegalStateException e) {
}
}
}