警报对话框的处理结果如何? (Android)

时间:2018-12-08 12:45:47

标签: java android alertdialog

我正在研究一个小型类,它可以生成警报对话框。该类的构造函数如下所示:

void popupMessage(String title, String message, String pText, String nText, boolean cancelable) {
        setPopupResult(999);
        AlertDialog.Builder dialog = new AlertDialog.Builder(currentActivity);
        dialog.setMessage(message).setCancelable(cancelable);
        dialog.setNegativeButton(nText, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                setPopupResult(0);
            }
        });
        dialog.setPositiveButton(pText, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                setPopupResult(1);
            }
        });

        AlertDialog alert = dialog.create();
        alert.setTitle(title);
        alert.show();
    }
如您所见,

基于按下是或否按钮,代码将私有变量的值设置为0或1,可以通过getter方法进行访问。 (该值在顶部设置为999,表示用户尚未按任何键)

我面临的问题是,当popupResult变量从999更改为0或1时,我应该能够从调用活动中捕获到我的声音。

(这样处理“警报”对话框可能会出错,请随时教育我)

2 个答案:

答案 0 :(得分:2)

由于用户单击对话框按钮与显示对话框时不同步,因此,一种实现方法是为您的方法提供某种回调,即在单击按钮时调用。 / p>

示例:

/* define this inside your dialog class */
public interface Callback {
    void onOkClicked();
    void onCancelClicked();
}

void popupMessage(String title, String message, String pText, String nText, boolean cancelable, Callback callback) {
    ...
        /* positive button clicklistener, for negative button, use callback.onCancelClicked() */
        public void onClick(DialogInterface dialog, int which) {
            callback.onOKClicked();
        }
    ... 
}

/* Using the method */
popupMessage(..., new Callback() {
    void onOKClicked() {
        /* do something when OK was clicked */
    }

    void onCancelClicked() {
        /* do something when Cancel was clicked */
    }
});   

答案 1 :(得分:1)

我看到您已经在变量currentActivity中包含了活动的上下文。
像这样在您的活动中创建方法setPopupResult()

public void setPopupResult(int x) {
  // your code goes here
}

以及在popupMessage()中,如果您的活动类别是MainActivity

dialog.setNegativeButton(nText, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        ((MainActivity) currentActivity).setPopupResult(0);
    }
});
dialog.setPositiveButton(pText, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        ((MainActivity) currentActivity).setPopupResult(1);            
    }
});