所以我有一个按钮,单击它时会显示一个警告对话框。我在活动的onCreate方法中为警报对话框创建视图。代码就在这里:
LayoutInflater factory = LayoutInflater.from(this);
view = factory.inflate(R.layout.grade_result, null);
当我第一次按下按钮时,对话框会显示我想要的方式,但是当我第二次按下它时会抛出此异常
11-28 00:35:58.066:E / AndroidRuntime(30348):引起:java.lang.IllegalStateException:指定的子节点已经有父节点。您必须首先在孩子的父母身上调用removeView()。
按下按钮时显示AlertDialog的方法的代码就在这里:
public void details(View v){
final AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setView(view);
alert.setMessage("Details About Your Grades")
.setCancelable(false)
.setPositiveButton("Continue", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id){
dialog.cancel();
}
});
alert.show();
任何帮助将不胜感激!谢谢!
答案 0 :(得分:5)
对应该在AlertDialog的Builder中设置的视图进行通知对我有用:
Button mButton = (Button) findViewById(R.id.my_button);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// inflating view out of the onClick() method does not work
LayoutInflater mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final ViewGroup viewGroup= (ViewGroup) mInflater.inflate(R.layout.my_view, null);
Dialog alertDialog = new AlertDialog.Builder(getActivity())
.setTitle(R.string.my_title)
.setView(viewGroup)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).create();
alertDialog.show();
}
}
答案 1 :(得分:1)
我在警告对话框中遇到了类似的问题。我第一次夸大一个视图,第二次我想显示一条消息。 如果显示警报对话框,则会对视图进行充气并缓存对话框。如果你第二次显示它时出现错误IllegalStateException:“首先在child的父级调用removeView()”
我通过删除第一次点击时充气并在第二次点击时显示消息的视图解决了这个问题。 - 每次在充气或创建消息之前删除视图或消息。
alertDialogBuilder.setView(null).setMessage(null);
alertDialogBuilder.setView(yourView).setMessage(yourMessage);
我修改了你的代码,它对我很好。
LayoutInflater factory = LayoutInflater.from(this);
mView = factory.inflate(R.layout.grade_result, null);
public void details(View v){
final AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setView(null).setMessage(null);
alert.setView(mView);
alert.setMessage("Details About Your Grades")
.setCancelable(false)
.setPositiveButton("Continue", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id){
dialog.cancel();
}
});
alert.show(); }
答案 2 :(得分:0)
使用此:
final AlertDialog.Builder alert = new AlertDialog.Builder(ProductsListAfterFilter.this);
alert.setTitle("Добавить продукт в корзину?");
alert.setMessage("Введите количество: ");
// Set an EditText view to get user input
final EditText input = new EditText(ProductsListAfterFilter.this);
alert.setView(input);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
int value = 0 ;
try {
value = Integer.valueOf(input.getText().toString());
}
catch (Exception err){
Toast.makeText(getApplicationContext(), "Введите число", 100).show();
}
//insertValue(value,st1,st2,st3,st4);
Toast.makeText(getApplicationContext(), "value = "+value, 100).show();
dialog.dismiss();
dialog.cancel();
}
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Canceled.
dialog.cancel();
dialog.dismiss();
}
});
final AlertDialog alertd = alert.create();
alertd.show();
答案 3 :(得分:0)
它说你的观点"与父母有关。当你调用.setView(view)时会发生这种情况。如果我正确 - alertDialog类为您的视图提供父级。这是android的基础知识。 ViewGroup可能有很多子视图。我有类似的问题。 所以,你可以尝试这个insinde onClick:
ViewGroup vGroup = view.getParent();
vGroup.removeView(view);
// And right after that - close dialog
dialog.dismiss();
它帮助了我,我希望它会帮助你!
答案 4 :(得分:-1)
使用alert.create();那么alertd.dismiss();销毁对话
final AlertDialog.Builder alert = new AlertDialog.Builder(this);
final AlertDialog alertd = alert.create();
alert.setTitle("Title");
alert.setMessage("Messaage");
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Canceled.
dialog.cancel();
alertd.dismiss();
}
});
答案 5 :(得分:-1)
使用此代码
final AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setView(view);
alert.setMessage("Details About Your Grades")
.setCancelable(false)
.setPositiveButton("Continue", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id)
{
dialog.dismiss();
}
});
AlertDialog alertdialog = alert.create();
alertdialog .show()
答案 6 :(得分:-2)
您可以在对话框中设置视图之前将View设置为null 就像这样:
alert.setView(null);
alert.setView(view);
在重新设置之前,它总是将视图设置为null。