当我试图在ImageViews
中添加alertDialog.show()
(iView
和iView2
)时,代码崩溃并给出
指定的子系已经有父系。您必须先在子系的父系上呼叫removeView()
。
我不知道为什么会发生这种情况。实际上,我读到了这个错误信息,可能给使用2倍alertDialog.show()
有什么建议吗?
mLayout = (RelativeLayout) findViewById(R.id.relaLayout);
final EditText input = new EditText(MainActivity.this);
final AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
final LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT
,LinearLayout.LayoutParams.MATCH_PARENT);
即时检视
input.setLayoutParams(lp);
iView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
select = 0;
alertDialog.setView(input);
alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
m_Text = input.getText().toString();
mLayout.addView(cth[0].setCardView(select, m_Text));
iView.setClickable(false);
}
});
alertDialog.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
alertDialog.show();
}
});
iView2界面
iView2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
select = 1;
//input.setLayoutParams(lp);
alertDialog.setView(input);
alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
m_Text = input.getText().toString();
mLayout.addView(cth[0].setCardView(select, m_Text));
iView2.setClickable(false);
}
});
alertDialog.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
alertDialog.show();
}
});
如果我评论alertDialog.show(),那么它工作,但我需要它
2条答案
按热度按时间jjhzyzn01#
查看一些源代码,您似乎正在分配相同的视图示例(EditText“input”)添加到警报对话框。每次调用
show()
方法时,都将通过create()
创建对话框。然后,提供给setView()
的视图将添加到生成的对话框布局中。由于该视图已添加到布局中,它现在有一个父视图(对话框布局)。在您可以再次显示对话框之前,您必须从父视图(AlertDialog)中删除该视图,或者示例化一个新视图。简单地移动示例化
EditText
的行(并删除final修饰符,在此范围内不需要它)到侦听器内部就解决了这个问题。vom3gejh2#
查看您的代码,您调用show()到AlertDialog.Builder示例。这就是您正确解决此问题的原因。
因此,您需要使用alertDialogBuilder.create()创建一个AlertDialog对象的示例。此create()方法返回AlertDialog对象,然后您可以调用show()。因此,让我们按照以下代码片段来更好地理解。首先,您需要创建一个名为createDailogObject的方法。
创建对话框对象()
现在,您可以在任何地方调用show方法!!!。
iView1
也在...
iView 2界面
我会百分百肯定的