首页 > 解决方案 > 如何在 Common Utils 中使用带有按钮的静态对话框

问题描述

我对某些活动使用自定义对话框。我在 CommonUtils 中创建 showDialog 方法并从 BaseActivity 调用。但是 Choices 的 onClick 方法必须在 viewmodel 中设置。我不能选择其他类的 onClick 方法。如何在 CommonUtils 中使用对话框选项?常用工具:

public final class CommonUtils extends AppCompatDialogFragment {
private CommonUtils() {
    }
public static boolean showDialog(Context context){
        final boolean[] result = new boolean[1];
        PrettyDialog prettyDialog = new PrettyDialog(context);
        prettyDialog.setMessage("Seçiminiz:");
        prettyDialog.setIcon(R.drawable.question_icon);
        prettyDialog.addButton("EVET", R.color.pdlg_color_white, R.color.pdlg_color_green, new PrettyDialogCallback() {
            @Override
            public void onClick() {
                result[0] = true;
                prettyDialog.dismiss();
            }
        });
        prettyDialog.addButton("HAYIR", R.color.pdlg_color_white, R.color.pdlg_color_red, new PrettyDialogCallback() {
            @Override
            public void onClick() {
                result[0] = false;
                prettyDialog.dismiss();
            }
        });
        prettyDialog.show();
        return result[0];
    }
}

BaseActivity中的调用方法:

 @Override
    public boolean getDialogResult() {
        return CommonUtils.showDialog(this);
    }

视图模型:

public class DialogViewModel extends BaseViewModel<BaseNavigator> {
    @Inject
    public DialogViewModel(){

    }

    public void onDialogButtonClick(View view){
        boolean result= getNavigator().getDialogResult();
        if (result==true){
            getNavigator().hideLoading();
            getNavigator().showLoading();
        }

    }
    public boolean testDialogResult(){
       return getNavigator().getDialogResult();
    }
}

我尝试从 commonutils 中提取结果值。但“onDialogBu​​ttonClick”只使用打开对话框,不使用“yes”或“no”动作。结果值不能拉。

标签: androidstaticdialogonclicklistenercustomdialog

解决方案


请试试这个只需向对话框按钮单击处理添加一个侦听器,例如

public interface ClickHandlerListener {
        /**
         * will work for positive(ok/yes) click
         */
        void onPositiveClick();

        /**
         * will work for negative(no/cancel) click
         */
        void onNegativeClick();
    }

现在将此侦听器设置为您的对话框方法,例如


public static boolean showDialog(Context context){
        final boolean[] result = new boolean[1];
        PrettyDialog prettyDialog = new PrettyDialog(context);
        prettyDialog.setMessage("Seçiminiz:");
        prettyDialog.setIcon(R.drawable.question_icon);
        prettyDialog.addButton("EVET", R.color.pdlg_color_white, R.color.pdlg_color_green, new PrettyDialogCallback() {
            @Override
            public void onClick() {
                        if (clickHandler != null) clickHandler.onPositiveClick();

                result[0] = true;
                prettyDialog.dismiss();
            }
        });
        prettyDialog.addButton("HAYIR", R.color.pdlg_color_white, R.color.pdlg_color_red, new PrettyDialogCallback() {
            @Override
            public void onClick() {
                        if (clickHandler != null) clickHandler.onNegativeClick();

                result[0] = false;
                prettyDialog.dismiss();
            }
        });
        prettyDialog.show();
        return result[0];
    }
}

并创建方法以将对话框的回调设置为调用对话框的活动或片段

public void setDialogClick(ClickHandlerListener click) {
        clickHandler = click;
    } 

现在调用将侦听器回调设置为活动/片段,即

setdialogClick(this);

并确保您的活动或片段实现了侦听器以在方法中传递它,否则您也可以匿名实现侦听器方法。如果它解决了您的问题,请接受此答案。


推荐阅读