【问题标题】:onItemSelected getting called lateonItemSelected 被叫晚了
【发布时间】:2014-02-10 07:02:39
【问题描述】:

我的代码中使用一些默认值初始化了 36 个微调器。

在初始化所有这些之前,我设置了一个名为“listen to false”的值。 将它们全部初始化后,我将其设置为 true。

在onItemSelected中,如果listen为真,我正在执行代码。

我已经彻底分析了我的代码,发现 onItemSelected 在设置微调器之后被调用。 实际上,它是在显示整个视图本身之后调用的。

在我设置微调器和调用 onItemSelected 之间似乎有一段时间过去了。不是立即调用吗?

我该如何解决这个问题?

【问题讨论】:

    标签: android spinner


    【解决方案1】:

    您的代码运行微调器元素的初始化过程,设置listen = true,您单击,视图的其余部分正在初始化,然后您的onItemSelected 被调用?

    这是因为点击事件将被存储在一个队列中,直到 MainThread 没有其他事情要做,但他坚持初始化其他视图元素并且首先会返回,如果这已经完成。

    为什么整个视图的初始化过程需要这么长时间?如果是因为 IO(网络/数据库),您应该阅读有关 Loader-Pattern 的信息。

    【讨论】:

    • 听 = 假,微调器初始化,听 = 真。然后整个视图加载。然后在没有任何点击的情况下调用 onItemSelected。
    • 当 onItemSelected 不是通过 UI 事件自动调用时,你在哪里调用它?
    • 我自己不叫它。顺便说一句,这可能吗?
    • 当然,它是一个方法,所以你可以调用它。 -- 初始化微调器时,将触发 onItemSelected-Event,该事件将在 MainThread 的 Message-Queue 中排队。所以这是很正常的行为,你想达到什么目的或者为什么这对你来说是个问题?
    • 我的问题是它在初始化时被触发了。为了避免这种情况,我使用了listen变量,将其设置为false,然后在初始化后将其设置为true。但是在再次将监听设置为 true 后,该方法会被调用 waaay。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2012-06-30
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多