这个主题有很多主题,他们的所有建议都没有解决问题。这种情况更复杂,因为后台服务正在将数据绘制到AlertDialog中。该服务使用LocalBroadcastManager将Intent传递给包含onCreateDialog回调的主活动。数据来得非常快。
我试过在onPause()中调用removeDialog,将上下文设置为null,这样线程就不会在null时调用它,并且在onStart中我将新上下文传递给发出广播接收器信号的线程。日志消息显示删除被调用的对话框。屏幕方向更改后,showDialog()方法现在触发onCreateDialog()回调。当发出回调信号时,findViewById()会按预期返回null,因为对话框已被删除(假设)但我仍然遇到了这个可怕的错误
“ java.lang.IllegalStateException:指定的子节点已经有父节点。您必须先在子节点的父节点上调用removeView()。”
(如何在AlertDialog上调用'removeView'也是我无法找到的答案,这个论坛中没有其他人找到答案!)
我唯一能想到的是广播事件排队的上下文错误。也许有办法清除所有转向广播接收器的意图?
这是onCreateDialog的代码。图形视图位于'waveForm.get(id)'中。它可以很好地工作并显示图形(不是我想要的连续),但随后在方向改变它就死了!
protected Dialog onCreateDialog(int id)
{
Log.d(TAG, "Alert Dialog 'onCreateDialog' method has been called with id " + id);
if(this.findViewById(id) != null)
{
Log.d(TAG, "Alert Dialog view exists!");
return null;
}
switch(id)
{
case 0:
Builder bldr = new AlertDialog.Builder(this);
Dialog alert = bldr.setView(waveForm.get(id)).setNegativeButton("Dismiss " + id,
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
dialog.cancel();
}
}).create();
alert.getWindow().setLayout(LayoutParams.WRAP_CONTENT, waveForm.get(id).getCurrentHeight());
return alert;
case 1:
Builder bldr1 = new AlertDialog.Builder(this);
Dialog alert1 = bldr1.setView(waveForm.get(id)).setNegativeButton("Dismiss " + id,
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
dialog.cancel();
}
}).create();
alert1.getWindow().setLayout(LayoutParams.WRAP_CONTENT, waveForm.get(id).getCurrentHeight());
return alert1;
case 2:
Builder bldr2 = new AlertDialog.Builder(this);
Dialog alert2 = bldr2.setView(waveForm.get(id)).setNegativeButton("Dismiss " + id,
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
dialog.cancel();
}
}).create();
alert2.getWindow().setLayout(LayoutParams.WRAP_CONTENT, waveForm.get(id).getCurrentHeight());
return alert2;
}
return null;
}
答案 0 :(得分:0)
你能发贴你的代码吗?它可能是您附加到Dialog而不是Dialog本身的View。确保在删除视图之前不要将视图添加到对话框中(如果已连接),请从当前父级添加。