android - 如何在 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 中提取结果值。但“onDialogButtonClick”只使用打开对话框,不使用“yes”或“no”动作。结果值不能拉。
解决方案
请试试这个只需向对话框按钮单击处理添加一个侦听器,例如
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);
并确保您的活动或片段实现了侦听器以在方法中传递它,否则您也可以匿名实现侦听器方法。如果它解决了您的问题,请接受此答案。
推荐阅读
- c# - 为共享基类的产品创建创建页面的正确方法是什么
- python - 如何使用匹配值对数据进行分组
- javascript - 在事件更改时跨表保持状态
- java - 如何使用 Java 中的 Selenium 在 Firefox 中使用自创扩展处理代理身份验证?
- css - 媒体查询和高度问题
- swift - 为什么函数调用需要参数名称,而分配给变量的函数却不允许?
- java - 如何在 Java 中使用 HTTP/REST 交换访问令牌(Oauth 2.0)的授权码?
- python - 如果前一列中的值不同,则计数器会增加,但在其他列值更改时会重置?
- mysql - 从 MySQL 视图中选择
- javascript - 可查看的内容会在设定的时间间隔内发生变化 - 但之前的内容会在之后闪现