android - Android:重用 AlertBuilder 实例
问题描述
我在一个方法中创建了一个方法,在使用这个对话框之前我只调用了一次这个方法:
private void makeAlertDialogBuilder() {
binding = DataBindingUtil.inflate(LayoutInflater.from(getContext()),
R.layout.revisited_dialog, null, false);
alertBuilder = new AlertDialog.Builder(getContext()).setView(binding.getRoot())
.setView(binding.getRoot());
binding.btnCancel.setOnClickListener(v -> alertDialog.dismiss());
}
我在工具栏中有一个菜单,所以我想点击添加菜单项,此对话框打开并显示新消息,当我单击编辑菜单项时显示带有新消息的对话框:
toolbar.setOnMenuItemClickListener(item -> {
int id = item.getItemId();
if (id == R.id.add_row) {
alertDialog = alertBuilder
.setMessage("Add")
.setCancelable(false)
.show();
exGridAdapter = new RevisitGridAdapter(gridAdapter, baseClass, Action.ADD);
initRecyclerView(exGridAdapter);
return true;
} else if (id == R.id.edit_row) {
if (selectedItem != null) {
alertDialog = alertBuilder
.setMessage("Edit")
.setCancelable(false)
.show();
exGridAdapter = new RevisitGridAdapter(gridAdapter, baseClass, Action.EDIT, selectedItem);
initRecyclerView(exGridAdapter);
}
第一次单击时,会显示对话框,但是当它被关闭并再次单击时,我收到 ANR 错误:
指定的孩子已经有一个父母。您必须首先在孩子的父母上调用 removeView()。
我已经创建了一个对象alertBuilder
并且我想使用它?有可能还是我必须重新创建新的 alertBuilder 对象?
解决方案
AlertDialog.Builder alertDialog; // Your Global Object
AlertDialog.Builder getAlertDialogObject() {
if (alertDialog != null) {
return alertDialog;
} else {
alertDialog = new AlertDialog.Builder(LoginIssueScreen.this);
}
return alertDialog;
}
您需要为 AlertDialog 创建一个通用方法:-
public void showAlerDialogResult(String msg, String title) {
AlertDialog.Builder alertDialog = getAlertDialogObject();
alertDialog.setMessage(msg);
alertDialog.setIcon(R.drawable.ic_check_green);
alertDialog.setTitle(title);
alertDialog.setCancelable(false);
alertDialog.setPositiveButton("OK", (dialogInterface, i) -> {
// Your code on click on ok
});
alertDialog.setNegativeButton("Cancel", (dialogInterface, i) -> {
// Your code on click on Cancel
});
alertDialog.show();
}
并像下面这样称呼它-:
showAlerDialogResult("Add Button clicked", "Click Event");
or
showAlerDialogResult("Edit Button clicked", "Click Event");
推荐阅读
- wpf - WPF ObservableCollection 和 InotifyPropertyChanged
- javascript - React-native 0.61.5 release build android 在特定路线上导航后崩溃
- rstudio - 更改 Rstudio“查找”行为
- javascript - Javascript:在视口中启动 Lottie 动画
- mysql - 尽管语法正确,Nodejs Async await 没有正确等待
- javascript - javascript中正确的数组排序
- java - 无法通过使用带有 Aspose 工作簿的 java 在 ADO(s3 存储桶)中提供密码来取消保护 xlsx、xls 文件
- php - MySQL更新查询join和join left
- jenkins - Jenkins 构建:无法为锁定文件/home/ubuntu/.gradle/.../gradle-6.7.1-all.zip.lck 创建父目录
- python - Discord.gateway 警告“Shard ID 无心跳阻塞超过 10 秒。” 在使用熊猫时