I am having some difficulties to update the content of an AlertDialog
on the onPrepareDialog
method.
I am setting the content of the AlertDialog, but the dialog comes to the screen with no buttons and no background. Probably the problem is related to the Builder
.
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_USER_INFORMATION:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
return builder.create();
default:
return null;
}
}
@Override
protected void onPrepareDialog(final int id, final Dialog dialog) {
switch (id) {
case DIALOG_USER_INFORMATION:
createUserInformationAlertDialog(dialog);
break;
}
}
public void createUserInformationAlertDialog(Dialog dialogIn) {
AlertDialog alertDialog = (AlertDialog) dialogIn;
View dialoglayout = alertDialog.getLayoutInflater().inflate(
R.layout.dialog_user_info,
(ViewGroup) findViewById(R.id.dialog_user_layout_root));
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(dialoglayout);
EventAttendant ea = this.event.getCrowd().getAttendees()
.get(positionUserToHaveInformationDisplayedOnTheDialog);
final EventAttendant clone = (EventAttendant) ea.clone();
// Setting values
TextView textView = (TextView) dialoglayout.findViewById(R.id.user_name_value);
textView.setText(ea.getName());
builder.setPositiveButton(Locale_PT_BR.SEE_ON_FACEBOOK,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {/* User clicked OK so do some stuff */
}
});
builder.setNegativeButton(Locale_PT_BR.BACK,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {...}
});
builder.setView(dialoglayout);
alertDialog.setView(dialoglayout);
alertDialog.setContentView(dialoglayout);
}
You should create the dialog in onCreateDialog()
and change text in onPrepareDialog()
.
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_USER_INFORMATION:
return createUserInformationAlertDialog();
default:
return null;
}
}
@Override
protected void onPrepareDialog(final int id, final Dialog dialog) {
switch (id) {
case DIALOG_USER_INFORMATION:
prepareUserInformationAlertDialog((AlertDialog)dialog)
break;
}
}
public Dialog createUserInformationAlertDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setPositiveButton(Locale_PT_BR.SEE_ON_FACEBOOK,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {/* User clicked OK so do some stuff */
}
});
builder.setNegativeButton(Locale_PT_BR.BACK,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {...}
});
return builder.create();
}
public void prepareUserInformationAlertDialog(AlertDialog alertDialog) {
EventAttendant ea = this.event.getCrowd().getAttendees()
.get(positionUserToHaveInformationDisplayedOnTheDialog);
final EventAttendant clone = (EventAttendant) ea.clone();
View dialoglayout = alertDialog.getLayoutInflater().inflate(
R.layout.dialog_user_info, null, false);
// Setting values
TextView textView = (TextView) dialoglayout.findViewById(R.id.user_name_value);
textView.setText(ea.getName());
alertDialog.setView(dialogLayout)
}
I haven't tested this code so it may contain some errors.