0

我将 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。

谢谢你的帮助!

4

1 回答 1

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

Since you have access to the AlertDialog.Builder object, simply change the layout before calling builder.create().


Addition

I have an EditText widget in my XML file which I inflate using builder.setView(inflater.inflate(R.layout.mydialog, null)). How do I change the text of this EditText widget without calling findViewById()?

Break that line into a series of commands. Specifically: inflate the XML, alter the layout, and pass it to setView().

View view = inflater.inflate(R.layout.mydialog, null);
EditText editText = (EditText) view.findViewById(R.id.text);
editText.setText("Foo bar");
builder.setView(view);
于 2013-01-19T22:30:51.820 回答