Víctor Martín
Víctor Martín

Reputation: 3450

Custom dialog with custom action on buttons

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

Answers (1)

Sneha Sarkar
Sneha Sarkar

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

Related Questions