package menion.android.whereyougo.gui.dialogs;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
public abstract class DialogFragmentEx extends DialogFragment {
public DialogFragmentEx() {
super();
}
public boolean shouldRetainInstance() {
return true;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// tell the framework to try to keep this fragment around
// during a configuration change (true), or recreate (false)
setRetainInstance(shouldRetainInstance());
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = createDialog(savedInstanceState);
dialog.setCancelable(isCancelable());
return dialog;
}
public abstract Dialog createDialog(Bundle savedInstanceState);
/**
* This is called when the Fragment's Activity is ready to go, after
* its content view has been installed; it is called both after
* the initial fragment creation and after the fragment is re-attached
* to a new activity.
*/
@Override
public void onActivityCreated(Bundle savedInstanceState) {
try {
super.onActivityCreated(savedInstanceState);
} catch (Exception e) {
dismissAllowingStateLoss();
}
}
/**
* This is called right before the fragment is detached from its
* current activity instance.
*/
@Override
public void onDetach() {
super.onDetach();
}
/**
* This is called when the fragment is going away. It is NOT called
* when the fragment is being propagated between activity instances.
*/
@Override
public void onDestroy() {
super.onDestroy();
}
// hack on this issue http://code.google.com/p/android/issues/detail?id=17423
// This is to work around what is apparently a bug. If you don't have it
// here the dialog will be dismissed on rotation, so tell it not to dismiss.
@Override
public void onDestroyView() {
if (getDialog() != null && getRetainInstance()) {
getDialog().setDismissMessage(null);
}
super.onDestroyView();
}
/**
* My own implementation of visibility check
*/
public boolean isDialogVisible() {
return isAdded() && !isHidden();
}
}