【问题标题】:Is there a companion to the Form.onShow() method I can use when a Form is hidden?当 Form 被隐藏时,我可以使用 Form.onShow() 方法吗?
【发布时间】:2016-04-28 02:00:47
【问题描述】:

在我的一些表单上,我在打开表单时使用 onShow() 方法注册了一个传感器侦听器。当我转到不同的表单时,我想取消注册这些听众。

我发现了 onShow() 方法可以在显示 Form 时执行任何我需要做的事情,但我没有看到 onHide() 方法或任何可用于 Form 自行清理的方法。我可以将清理代码放在导航命令中,但它们确实属于表单。有没有我忽略的方法可以使用?

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    通常您不需要知道退出表单,除非您处于可能是隐式导航的 GUI 构建器应用程序中。由于您总是调用newForm.show(),因此可以在那里完成退出所需的实现逻辑。

    但是,您始终可以覆盖 deinitilize() 来执行此操作。请注意,当您显示Dialog 时可能会调用它,因此initComponent() 可能比onShow() 更好。

    请注意,这只适用于显示Form 的视觉方面。您还需要在应用最小化时调用的 stop() 方法和在应用恢复时调用的 start() 方法中实现逻辑(都在应用的主类中)。

    【讨论】:

    • 确实,您通常不需要注意退出“表单”。由于我正在取消注册本地传感器的侦听器,因此我的情况是一种特殊情况。 'newForm.show()' 方法是一个糟糕的地方,因为这可能不是隐藏表单的方式。在面向对象的思想中,Form 负责注册/注销监听器,因此放置此代码的最佳位置是“Form.onHide()”方法,该方法肯定会在表单隐藏时被调用。 (我的 'start()' 和 'stop()' 方法中已经有代码,它们遵循我的表单中的 start() 和 stop() 方法。)
    • 您是否注意到他建议deinitialize()/initComponent() 您也可以对每个组件执行这两项操作?
    • 实际上,dinitialize() 可能会起作用。我试试看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    相关资源
    最近更新 更多