Android对话框接口获取内部对话框视图

时间:2012-03-19 13:38:21

标签: android dialog

我有一个简单的程序来显示一个对话框,其中包含一个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();

关于我在哪里可以找到它的任何线索?

6 个答案:

答案 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);