我正在研究一个小型类,它可以生成警报对话框。该类的构造函数如下所示:
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时,我应该能够从调用活动中捕获到我的声音。
(这样处理“警报”对话框可能会出错,请随时教育我)
答案 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);
}
});