In a activity ShowInfoActivity
, user brings up a dialog by clicking on a button:
mButtonInfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment infoDialog = new UpdateUserInfoDialog();
infoDialog.show(getFragmentManager(), "Update Info Dialog");
}
});
I made this dialog in a separate file UpdateUserInfoDialog.java
and it has an empty activity UpdateUserInfoActivity.java
which is required to show this dialog.
I have another method that should be executed when the user has done with the dialog, either setPositiveButton
or setNegativeButton
. I can not reference the ShowInfoActivity
in the dialog class.
Here is the code for dialog class:
public class UpdateUserInfoDialog extends DialogFragment{
public static final String TAG = "ChangeWeightDialog";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mReg = Storage.readUserRegistration(getActivity().getApplicationContext());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container
, Bundle savedInstanceState) {
if(getDialog() != null) {
getDialog().setCanceledOnTouchOutside(false);
}
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
final LayoutInflater inflater = getActivity().getLayoutInflater();
final View dialogView = inflater.inflate(R.layout.dialog_update_userinfo, null);
//Create dialog and stuff......
builder.setPositiveButton("update", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Handle positive click
}
});
builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//handle dnegative
dismiss();
}
});
builder.setTitle("update personal information");
builder.setView(dialogView);
return builder.create();
}
}
So what I am looking for is to have kind of a listener when user clicks on button to show the activity, to tell if it has been dismissed or done:
mButtonInfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment infoDialog = new UpdateUserInfoDialog();
//SOMETHING LIKE:
infoDialog.whenDismissed(doThisMethod());
infoDialog.show(getFragmentManager(), "Update Info Dialog");
}
});
I have tried this but it gives NullPointer in OnDissmiss(new ...)
line:
mButtonInfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment infoDialog = new UpdateUserInfoDialog();
infoDialog.onDismiss(new DialogInterface() {
@Override
public void cancel() {
showUserInformation();
}
@Override
public void dismiss() {
showUserInformation();
}
});
infoDialog.show(getFragmentManager(), "Update Info Dialog");
}
});
Try to override onDismiss() in your UpdateUserInfoDialog
. It should broadcast a custom Intent
that notifies about dialog cancellation. You may catch this Intent
in the specific component that will invoke your doThisMethod()
.
Also, see LocalBroadcastManager for "local" broadcasting.