DialogFragment.show()
is asynchronous -- the DialogFragment
isn't actually immediately displayed -- it's sent to the end of the message queue. I'd suggest providing the timeout value as an argument, and then set it in onCreateDialog()
along with the title. For example:
public class SessionInactivityDialog extends DialogFragment {
public static final String EXTRA_TIMEOUT = "timeout";
public static SessionInactivityDialog newInstance(long timeout) {
Bundle args = new Bundle();
args.putLong(EXTRA_TIMEOUT, timeout);
SessionInactivityDialog dialog = new SessionInactivityDialog();
dialog.setArguments(args);
return dialog;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final SessionActivity activity = (SessionActivity) getActivity();
final long timeout = getArguments().getLong(EXTRA_TIMEOUT);
final String msg = activity.getString(R.string.imminent_logout_text, (timeout / 1000));
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle(R.string.imminent_logout);
builder.setMessage(msg);
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
activity.resetTimer();
}
});
return builder.create();
}
}
Then you can just show it with:
SessionInactivityDialog.newInstance(timeout)
.show(getFragmentManager(), TAG);
I'd also suggest making an interface for the dialog to communicate with the activity, rather than adding the direct dependency on SessionActivity
(that way you can reuse this in any Activity, as long as it implements your interface).