AlertDialog.Builder 自定义视图:如何初始化视图?
AlertDialog.Builder with a custom view: how to initialize the view?
我正在开发 AlertDialog
来编辑列表项。我可以使用 Builder.setView
传递我的编辑器布局,我可以从肯定按钮回调中获得结果,但我没有看到初始化视图的方法。例如有一个 EditText
应该显示特定的字符串,等等。可行吗?
我知道我可以子类化 Dialog
,但似乎我需要更多的实用程序代码才能实现相同的结果。好像不太干净。
这个非常简单的示例将向您展示如何使用 editText 创建警报对话框(不要使用 xml 布局,以编程方式进行)
public void showDialogWithEditText(){
AlertDialog.Builder alert = new AlertDialog.Builder(this);
final EditText edittext = new EditText(this);
alert.setTitle("Enter your name:");
alert.setView(edittext);
alert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String value = edittext.getText().toString();
// use the value.
}
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// cancel
}
});
alert.show();
}
简单地说,通过预先膨胀它来保留视图的引用:
LayoutInflater inflater = this.getLayoutInflater();
View dialogView = inflater.inflate(R.layout.alert_label_editor, null);
dialogBuilder.setView(dialogView);
然后,将您的 EditText
引用为:
EditText editText = (EditText) dialogView.findViewById(R.id.label_field);
我正在开发 AlertDialog
来编辑列表项。我可以使用 Builder.setView
传递我的编辑器布局,我可以从肯定按钮回调中获得结果,但我没有看到初始化视图的方法。例如有一个 EditText
应该显示特定的字符串,等等。可行吗?
我知道我可以子类化 Dialog
,但似乎我需要更多的实用程序代码才能实现相同的结果。好像不太干净。
这个非常简单的示例将向您展示如何使用 editText 创建警报对话框(不要使用 xml 布局,以编程方式进行)
public void showDialogWithEditText(){
AlertDialog.Builder alert = new AlertDialog.Builder(this);
final EditText edittext = new EditText(this);
alert.setTitle("Enter your name:");
alert.setView(edittext);
alert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String value = edittext.getText().toString();
// use the value.
}
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// cancel
}
});
alert.show();
}
简单地说,通过预先膨胀它来保留视图的引用:
LayoutInflater inflater = this.getLayoutInflater();
View dialogView = inflater.inflate(R.layout.alert_label_editor, null);
dialogBuilder.setView(dialogView);
然后,将您的 EditText
引用为:
EditText editText = (EditText) dialogView.findViewById(R.id.label_field);