在Codename One上,以前的表单并没有完全消失

时间:2016-12-01 04:51:51

标签: codenameone

我用Codename One编写的应用程序涉及在主窗体中显示相机预览。我已经使用本机接口实现使其在Android上运行(iOS以后)。

该应用还包括在应用内购买升级到完整版。这就是为什么定期显示表单以建议用户升级的原因。他们也可以选择稍后升级,这会导致此升级到完整版本表格消失,并使主要表单显示相机预览。

然而,在真实设备上,有时升级到完整版本形式并没有完全消失,并且在主窗体上有回忆。在这种情况下,相机预览会显示在屏幕的一部分上,而应用程序按钮则不会显示。但是,如果用户触摸屏幕几秒钟后,主表单将完全显示,升级表单的回忆消失。

看起来在UI线程上可能有太多事情要做,但我只是在用户按下按钮关闭升级表单时调用new MainForm(theme).show()。所以这应该是好的,不应该吗?请注意,CN1模拟器不显示edt违规(但模拟器中没有相机预览)。

或者在将布局添加到布局后,我是否必须在MainForm中调用revalidate()?我应该怎么做才能使这些回忆消失?

任何帮助真的很感激,

2 个答案:

答案 0 :(得分:0)

这些东西总是难以跟踪,但我猜测对等组件会以某种方式与新表单发生冲突。

请确保不要致电postInvalidate,除非你真的必须这样做,即使这样你也应该尽可能地限制和避免它,因为它可能与我们的绘图逻辑冲突。

另外,请确保您没有更改父表单的不透明度,例如如果您更改了表单UIID。

答案 1 :(得分:0)

看起来已找到解决方案。事实上,我有一个原生方法初始化相机和surfaceview。我在EDT上运行这个方法然后显示新的MainForm。

我确实在invokeAndBlock()块中接受了初始化方法。现在看起来这种滞后远远不那么明显(我看不到它)。在我自己的逻辑中,我可以用invokeAndBlock()将在一个单独的线程上完成初始化工作并且当它完全就绪(因此可以显示相机和surfaceview)这一事实来解释它,可以显示MainForm

这可能是实际的解决方案@Shai吗?