我有一个简单的程序来显示一个对话框,其中包含一个edittext视图,并听取正/负按钮,在每个按钮中执行自定义操作(读取该edittext并将其内容保存到活动变量)。
当我看不到从对话框界面恢复当前对话框的任何方法时出现问题(然后,我无法恢复对话框中的任何视图)。
可能这是一个菜鸟问题,但经过一些谷歌搜索,我没有人回答。
我的代码如下
LayoutInflater li = LayoutInflater.from(this);
View myView = li.inflate(R.layout.my_layout, null);
AlertDialog.Builder cDialog = new AlertDialog.Builder(this);
cDialog.setView(myView);
cDialog.setPositiveButton(R.string.start_download, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//here the code to retrieve dialog
}
});
cDialog.create();
关于我在哪里可以找到它的任何线索?
答案 0 :(得分:70)
您可以使用Dialog
中的onClick()
检索视图:
EditText edit = (EditText) ((AlertDialog) dialog).findViewById(R.id.the_id_of_view);
答案 1 :(得分:13)
这种方式在我的代码中运行得很完美:
public void onClick(DialogInterface dialog, int which) {
Dialog dialog2 =Dialog.class.cast(dialog);
EditText edit = (EditText) dialog2.findViewById(R.id.myedittext);
}
欢呼声
答案 2 :(得分:10)
您已经引用了包含编辑文本的视图。为什么不直接使用它?只需确保您将视图设为最终版,以便可以在OnClickListener
匿名类中访问它。
LayoutInflater li = LayoutInflater.from(this);
final View myView = li.inflate(R.layout.my_layout, null);
// don't forget to mark myView as final
AlertDialog.Builder cDialog = new AlertDialog.Builder(this);
cDialog.setView(myView);
cDialog.setPositiveButton(R.string.start_download, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//here the code to retrieve dialog
EditText edit = (EditText) myView.findViewById(R.id.the_id_of_view);
}
});
cDialog.create();
答案 3 :(得分:0)
您可以从方法show()
alertBuidler返回对话框。
adb
调用Dialog
的{{1}}方法并获取final AlertDialog dialog = adb.show();
,如下所示:
dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();//or
dialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick();//or
dialog.getButton(DialogInterface.BUTTON_NEUTRAL).performClick();
因此,您可以在活动的任何代码点调用对话框中的任何按钮:
SELECT COUNT (OS_USERNAME)
FROM DBA_AUDIT_SESSION
WHERE USERNAME IN ('USER1','USER2','USER3')
AND TIMESTAMP>=SYSDATE - 10/(24*60)
AND RETURNCODE !='0'
答案 4 :(得分:0)
您可以使用以下代码获取对话框实例:
val builder = AlertDialog.Builder(this)
builder.setMessage(R.string.eneter_url_message)
.setView(R.layout.input_dialog)
.setPositiveButton(R.string.OK) { dialog, _ -> validateUrl(dialog) }
.setNegativeButton(R.string.CANCEL) { dialog, _ -> dialog.dismiss() }
val dialog = builder.create()
dialog.show()
urlInput = dialog.findViewById(R.id.urlInput)
一旦调用 dialog.show(),您就可以使用 findViewById
找到任何放大的视图答案 5 :(得分:0)
AlertDialog alertDialog = new AlertDialog.Builder(navigationDrawer.getContext())
.setView(R.layout.add_category_dialog)
.create();
alertDialog.show();
AppCompatSpinner spinner = alertDialog.findViewById(R.id.add_category_icon_selector_id);