patternjavaMinor
Passing on button click listeners via Bundle in AlertDialogFragment
Viewed 0 times
clickbundlepassingalertdialogfragmentviabuttonlisteners
Problem
I have a simple class:
```
public class AlertDialogFragment extends DialogFragment {
private static final DialogInterface.OnClickListener DUMMY_ON_BUTTON_CLICKED_LISTENER = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// do nothing
}
};
public static final class Builder implements Parcelable {
public static final Creator CREATOR = new Creator() {
@Override
public Builder createFromParcel(Parcel source) {
return new Builder(source);
}
@Override
public Builder[] newArray(int size) {
return new Builder[size];
}
};
private Optional title;
private Optional message;
private Optional positiveButtonText;
private Optional negativeButtonText;
public Builder() {
title = Optional.absent();
message = Optional.absent();
positiveButtonText = Optional.absent();
negativeButtonText = Optional.absent();
}
public Builder(Parcel in) {
title = (Optional) in.readSerializable();
message = (Optional) in.readSerializable();
positiveButtonText = (Optional) in.readSerializable();
negativeButtonText = (Optional) in.readSerializable();
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeSerializable(title);
out.writeSerializable(message);
out.writeSerializable(positiveButtonText);
out.writeSerializable(negativeButtonText);
}
@Override
public int describeContents() {
return 0;
}
public Builder withTitle(Integer title) {
this.title = Optional.fromNullable(title);
return this;
}
public Builder withMessage(Integer message) {
```
public class AlertDialogFragment extends DialogFragment {
private static final DialogInterface.OnClickListener DUMMY_ON_BUTTON_CLICKED_LISTENER = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// do nothing
}
};
public static final class Builder implements Parcelable {
public static final Creator CREATOR = new Creator() {
@Override
public Builder createFromParcel(Parcel source) {
return new Builder(source);
}
@Override
public Builder[] newArray(int size) {
return new Builder[size];
}
};
private Optional title;
private Optional message;
private Optional positiveButtonText;
private Optional negativeButtonText;
public Builder() {
title = Optional.absent();
message = Optional.absent();
positiveButtonText = Optional.absent();
negativeButtonText = Optional.absent();
}
public Builder(Parcel in) {
title = (Optional) in.readSerializable();
message = (Optional) in.readSerializable();
positiveButtonText = (Optional) in.readSerializable();
negativeButtonText = (Optional) in.readSerializable();
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeSerializable(title);
out.writeSerializable(message);
out.writeSerializable(positiveButtonText);
out.writeSerializable(negativeButtonText);
}
@Override
public int describeContents() {
return 0;
}
public Builder withTitle(Integer title) {
this.title = Optional.fromNullable(title);
return this;
}
public Builder withMessage(Integer message) {
Solution
I'm trying to grasp what you are trying to accomplish here. I just can't find a reason for why you are doing what you do. You are serializing title, message, positive button text and negative button text, ok, that I can understand. But serializing the listener, which really is logic? That's not an easy task.
There is really nothing wrong with setting listeners directly to the
For the record, you don't have to call
Your
There is really nothing wrong with setting listeners directly to the
AlertDialogFragment instance.For the record, you don't have to call
dialog.dismiss(); in your listener methods. In fact, with the way Android dialogs work, you can pass null as the listener and it will by default simply close the dialog.Your
AlertDialogFragment.Builder class seems to be primarily a wrapper around AlertDialog.Builder which doesn't really feel necessary to me. Are you really sure that you need this class?Context
StackExchange Code Review Q#69569, answer score: 2
Revisions (0)
No revisions yet.