Qualcuno può dare un'occhiata se sto facendo correttamente quanto segue. Ho un frammento che ha un progressdialog e ho bisogno che funzioni attraverso un interruttore di orientamento. Io attualmente faccio in questo modo:ProgressDialog (Frammento) che funziona attraverso un interruttore di orientamento
// I am using the compat libraries
import android.support.v4.app.DialogFragment;
public class ProgressDialogFragment extends DialogFragment {
private ProgressDialog mProgressDialog = null;
private int mMax = 100;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE, 0);
setRetainInstance(true);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
mProgressDialog = new ProgressDialog(getActivity());
mProgressDialog.setTitle("Title");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setCancelable(true);
mProgressDialog.setProgress(0);
mProgressDialog.setMax(mMax);
mProgressDialog.setCanceledOnTouchOutside(false);
return mProgressDialog;
}
// there seems to be a bug in the compat library - if I don't do the following - the dialog is not show after an orientation switch
@Override
public void onDestroyView() {
if (getDialog() != null && getRetainInstance())
getDialog().setDismissMessage(null);
super.onDestroyView();
}
public void setMax(int arg1) {
mProgressDialog.setMax(arg1);
mMax = arg1;
}
public void setProgress(int arg1) {
mProgressDialog.setProgress(arg1);
}
}
nella mia attività ho creare questa ProgressDialogFragment e mi chiamano show() quando ho bisogno la finestra di dialogo per mostrare. Sto cercando di capire perché nel metodo onCreateDialog non posso semplicemente restituire mProgressDialog se esiste già (ricevo un'eccezione dicendo "requestFeature() deve essere chiamato prima di aggiungere il contenuto"). Sicuramente uno degli usi dei frammenti è riutilizzare le risorse in questi casi: perché devo creare una nuova finestra di dialogo invece di usare quella che è già presente?
Il metodo onCreate non viene chiamato su un interruttore di orientamento: il frammento non viene distrutto e quindi ricreato. – Lieuwe
Mi spiace intendevo il metodo onCreateDialog che verrà chiamato di nuovo. –
Stai provando a salvare l'avanzamento tra le modifiche all'orientamento? –