Pokud v Androidu používáte dialogy pro zobrazení nějaké informace uživateli, nesmíte zapomenout na znovuvytvoření activity (při rotaci displeje, zasunutím zařízení do doku, …) při které je activity ukončena a znovu vytvořena. Tím dojde ke zrušení dialogu. Vytvoří se vám v aplikaci při tomto úkonu správně znovu?
Pokud používáte klasický AlertDialog (po nějakém úkonu – ne zobrazení v onCreate) nebude dialog při otočení displeje zobrazen
DialogFragment
Řešením tohoto problému je DialogFragment, který zůstane zobrazen i po restartování activity. Uvádím jednoduchou kontru kódu jak na to:
MyAlertDialogFragment.java
import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v7.app.AlertDialog; public class MyAlertDialogFragment extends DialogFragment { public static MyAlertDialogFragment newInstance(String title) { MyAlertDialogFragment frag = new MyAlertDialogFragment(); Bundle args = new Bundle(); args.putString("title", title); frag.setArguments(args); return frag; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { String title = getArguments().getString("title"); return new AlertDialog.Builder(getActivity()) .setTitle(title) .setPositiveButton("YES", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { //... } } ) .setNegativeButton("CANCEL", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { //... } } ).create(); } }
Activity:
Button button= (Button) findViewById(R.id.button2); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DialogFragment newFragment = MyAlertDialogFragment.newInstance("time : " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime()) ); newFragment.show(getSupportFragmentManager(), "dialog"); } });