我有一个带有编辑文本区域的警告对话框。当我第二次调用它时,应用程序崩溃并出现错误:
02-28 23:25:08.958: E/AndroidRuntime(11533): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
这是我的代码:
alert = new AlertDialog.Builder(this);
String txt_title = context.getResources().getString(R.string.txt_head_search_coord);
String txt_message = context.getResources().getString(R.string.txt_mess_search_coord);
alert.setTitle(txt_title);
alert.setMessage(txt_message);
// Set an EditText view to get user input
final EditText input = new EditText(this);
alert.setView(input);
alert.setPositiveButton(context.getResources().getString(R.string.Accept), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String value = input.getText().toString();
// Do something with value!
dialog.dismiss();
}
});
alert.setNegativeButton(context.getResources().getString(R.string.Cancel), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
}
});
//UTM Koordinate suchen
btn_search_coord.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
alert.show();
}
});
警报是全局定义的,所以我可以在 onClickListener 中调用它
我已经关闭了我的对话...
最佳答案
AlertDialog.Builder.show
从 Builder
的内容创建 新 Alert
实例,包括setView
中给出的 View 。
因此,您的input
将被添加到两个alerts
中。为防止这种情况,请使用 create
创建 AlertDialog
的最终实例,并在该实例上调用 show
:
final AlertDialog alertDialog = alert.create();
[...]
// in onClick
alertDialog.show();
从更广泛的角度来看,您应该使用 showDialog(int id)
以及相关的方法 onCreateDialog
和 onPrepareDialog
。但是,如果您使用 Fragments
,所有这些现在都已弃用,在这种情况下,您应该使用 DialogFragment
关于java - alertdialog - removeView 必须被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22107128/