更改AlertDialog中EditText小部件的内容而不使用onPrepareDialog()

时间:2013-01-19 22:23:22

标签: android dialog alertdialog

我正在使用AlertDialog,其中包含一个包含EditText小部件的自定义视图。我想在显示AlertDialog之前更改EditText小部件的内容。我知道这通常是通过覆盖onPrepareDialog()并在那里设置文本来完成的。但是,据我所知,这在我的具体情况下不起作用,因为我使用AlertDialog.show()而不是Activity.showDialog()。

那么我应该如何使用AlertDialog.show()显示一个对话框呢?一种解决方案是在对话框被放到前面之后设置文本,即:

AlertDialog alertDialog = builder.create(); 
alertDialog.show();
EditText editText = (EditText) alertDialog.findViewById(R.id.text);
editText.setText("Foo bar");

但是,我不认为这是一个很好的解决方案,因为首先显示对话框,然后设置文本。我想在实际显示对话框之前设置文本。

有没有办法实现这个目标?我无法在alertDialog.show()之前执行此操作,因为findViewById()在alertDialog.show()之前调用时返回null。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

AlertDialog alertDialog = builder.create(); 
alertDialog.show();

由于您可以访问AlertDialog.Builder对象,因此只需在调用builder.create()之前更改布局。


添加

  

我的XML文件中有一个EditText小部件,我使用builder.setView(inflater.inflate(R.layout.mydialog,null))进行扩充。如何在不调用findViewById()的情况下更改此EditText小部件的文本?

将该行分成一系列命令。具体来说:膨胀XML,改变布局,并将其传递给setView()

View view = inflater.inflate(R.layout.mydialog, null);
EditText editText = (EditText) view.findViewById(R.id.text);
editText.setText("Foo bar");
builder.setView(view);