I am looking for some comments on my code and whether or not this is the best way to create an abstract class. In addition, some of the abstract methods are rarely called so I use the base variables within the subclass to make sure onCreateDialog
selects the correct stuff. Hence, the getTitle() > 0
conditional.
public abstract class BaseDialogFragment extends DialogFragment {
// Base Variables
public static final int NONE = -1;
public static final int ITEM_SET = 1;
// Extras
public String extraTitle = "";
public String extraMessage = "";
private View dialogView;
private ListView list;
public BaseDialogFragment() {}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
ContextThemeWrapper context = null;
String theme = ActivityPrefHandler.getTheme(getActivity());
if (theme.equals(PreferencesActivity.MATERIAL)) {
context = new ContextThemeWrapper(getActivity(), R.style.ThemeMainDialog);
} else if (theme.equals(PreferencesActivity.LIGHT)) {
context = new ContextThemeWrapper(getActivity(), R.style.ThemeLightDialog);
} else if (theme.equals(PreferencesActivity.DARK)) {
context = new ContextThemeWrapper(getActivity(), R.style.ThemeDarkDialog);
}
CustomAlertDialogBuilder builder = new CustomAlertDialogBuilder(context);
if (getIcon() > 0) {
builder.setIcon(getIcon());
}
if (getTitle() > 0) {
if (getExtraTitle().equals("")) {
builder.setTitle(getTitle());
} else {
builder.setTitle(getExtraTitle());
}
}
if (getMessage() > 0) {
if (getExtraMessage().equals("")) {
builder.setMessage(getMessage());
} else {
builder.setMessage(getExtraMessage());
}
}
if (getDialogView() > 0) {
LayoutInflater inflater = getActivity().getLayoutInflater();
dialogView = inflater.inflate(getDialogView(), null);
builder.setView(dialogView);
}
if (getPositiveButtonText() > 0) {
builder.setPositiveButton(getPositiveButtonText(), new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
onConfirmClick();
}
});
}
if (getNeutralButtonText() > 0) {
builder.setNeutralButton(getNeutralButtonText(), new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
onNeutralClick();
}
});
}
builder.setNegativeButton(R.string.cancel, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
onCancelClick();
}
});
return builder.create();
}
@Override
public void onDestroyView() {
extraTitle = "";
super.onDestroyView();
}
public abstract void setListener(final OnDialogConfirmed l);
public abstract int getIcon();
public abstract int getTitle();
public abstract int getMessage();
public abstract int getDialogView();
public abstract int getPositiveButtonText();
public abstract int getNeutralButtonText();
public abstract void onConfirmClick();
public abstract void onCancelClick();
public abstract void onNeutralClick();
public void setTitle(String title) {
extraTitle = title;
}
public String getExtraTitle() {
if (!extraTitle.equals("")) {
return extraTitle;
} else {
return "";
}
}
public void setExtraMessage(String message) {
extraMessage = message;
}
public String getExtraMessage() {
if (!extraMessage.equals("")) {
return extraMessage;
} else {
return "";
}
}
public void setListViewAdapter(SimpleCursorAdapter adapter) {
if (dialogView != null) {
if (dialogView.findViewById(R.id.fragment_listview) != null) {
list = (ListView) dialogView.findViewById(R.id.fragment_listview);
if (adapter != null) {
list.setAdapter(adapter);
}
}
}
}
public ListView getListView() {
return list;
}
// generic methods omitted
}