Reputation: 3450
I'm thinking if it is possible to do a custom base class/method to create dialogs, but with custom actions loaded on live. I don't know if I've explained me so well.
If I have the next source:
public void showDialogCustom(String title, String content, String positiveText, String negativeText) {
getBaseActivity().hideMaterialDialog();
getBaseActivity().setDialog(new MaterialDialog.Builder(getActivity())
.title(title)
.content(content)
.positiveText(positiveText)
.negativeText(negativeText)
.canceledOnTouchOutside(false)
.cancelable(false)
.onPositive(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
//SOME ACTION!!!
}
})
.onNegative(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
//SOME ACTION!!!
}
})
.show());
}
I want to customize the action for positive or negative clicks. Call the class CustomDialog like, CustomDialog.showDialogCustom(params...) with the texts params and with the actions. Is this possible?
Thank you.
Upvotes: 0
Views: 408
Reputation: 731
This may help you. You can create a custom dialog layout as you want. And whenever you want to show any dialog just pass parameters according to your needs. In DialogButtonListener
you will get the button click events for both positive and negative buttons.
public void displayDialog(final Context mContext, final String title, String msg, final String strPositiveBtn,
final String strNegativeBtn, final boolean isTitle, final boolean isNegativeBtn, final DialogButtonListener mDialogButtonListener) {
if (mContext != null && !((Activity) mContext).isFinishing()) {
if (TextUtils.isEmpty(msg)) {
msg = mContext.getString(R.string.alert_some_error);
}
final Dialog mDialog = new Dialog(mContext, R.style.StyleCommonDialog);
final WindowManager.LayoutParams wlmp = mDialog.getWindow().getAttributes();
wlmp.gravity = Gravity.CENTER;
wlmp.width = WindowManager.LayoutParams.MATCH_PARENT;
wlmp.height = WindowManager.LayoutParams.WRAP_CONTENT;
mDialog.getWindow().setAttributes(wlmp);
mDialog.setCancelable(true);
mDialog.setCanceledOnTouchOutside(false);
mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
mDialog.setContentView(R.layout.custom_common_dialog);
final TextView tvTitle = mDialog.findViewById(R.id.common_dialog_tvTitle);
final TextView tvMsg = mDialog.findViewById(R.id.common_dialog_tvMsg);
final TextView btnPositive = mDialog.findViewById(R.id.common_dialog_btnPositive);
final TextView btnNegative = mDialog.findViewById(R.id.common_dialog_btnNegative);
tvTitle.setText(title.trim());
tvMsg.setText(setFormattedHtmlString(msg.trim()));
if (isTitle) {
tvTitle.setVisibility(View.VISIBLE);
} else {
tvTitle.setVisibility(View.GONE);
}
btnPositive.setOnClickListener(new OnClickListenerWrapper(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDialog.dismiss();
mDialogButtonListener.onPositiveButtonClicked();
}
}));
if (!TextUtils.isEmpty(strPositiveBtn.trim())) {
btnPositive.setText(strPositiveBtn.trim());
}
if (isNegativeBtn) {
btnNegative.setVisibility(View.VISIBLE);
btnNegative.setOnClickListener(new OnClickListenerWrapper(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDialog.dismiss();
mDialogButtonListener.onNegativeButtonClicked();
}
}));
if (!TextUtils.isEmpty(strNegativeBtn.trim())) {
btnNegative.setText(strNegativeBtn.trim());
}
} else {
btnNegative.setVisibility(View.GONE);
}
mDialog.show();
}
}
DialogButtonListener interface is like this:
public interface DialogButtonListener {
void onPositiveButtonClicked();
void onNegativeButtonClicked();
}
Upvotes: 2