public class myActivity extends Activity
{
private static AlertDialog somedialog = null;
protected void onCreate(Bundle savedInstanceState)
{
somedialog = new AlertDialog.Builder(ctx).create();
innerclass = new innerclass();
innerclass.start();
}
private class innerClass extends Thread
{
if (!somedialog.isShowing())
{
runOnUiThread(new Runnable()
{
somedialog.setMessage("test");
somedialog.show();
}
}
}
}
我在这段代码中有一个对话框,该对话框仅在该对话框不存在时才需要显示。该对话框仅由innerClass显示。没有其他方法可以调用此somedialog对象。
我希望该对话框首次出现,并且仅在上一个对话框关闭时才重新出现,但是我发现上面有多个对话框。
由于某种原因,即使打开了对话框,isShowing方法也会返回false。
关于为什么发生这种情况的任何想法吗?
但是,当执行此代码时,somedialog.isShowing()始终返回false,因此我彼此之间有多个对话框。
答案 0 :(得分:0)
您每次都创建一个AlertDialog的新实例
new AlertDialog.Builder(ctx).create();
并在显示之前检查isShowing()
。结果,它总是返回false。
答案 1 :(得分:0)
您的多线程可能会引入一些问题,并且isShowing()
的值会在线程之间读取时被缓存。我无法从您的示例中看到innerClass
的用途,只需删除它即可。这也类似于:
private class innerClass extends Thread {
runOnUiThread(new Runnable() {
if(!someDialog.isShowing()) {
somedialog.setMessage("test");
somedialog.show();
}
}
}
此外,您不应该保留对static
的{{1}}引用-没必要,它不能与AlertDialog
的生命周期很好地配合使用,并且正在等待内存泄漏发生。
答案 2 :(得分:0)
感谢所有尝试在此查询中为我提供帮助的人。最终结果证明是@午夜的愚蠢编码错误。我在内部类线程中有多个runOnUiThreads,其中一个警报对象正在重新创建。