【问题标题】:Is there a workaround to the OnItemSelectedListener bug?OnItemSelectedListener 错误是否有解决方法?
【发布时间】:2011-02-28 22:22:37
【问题描述】:

我怀疑答案是否定的,但我想我会问...

我有一个 Spinner,当用户做出选择时,它需要显示一个隐藏的“继续”按钮。但是,由于 OnItemSelectedListener 在第一次渲染微调器时被触发,并且由于当用户重新选择已突出显示的项目时它不会再次触发,因此似乎没有办法使用此事件来显示一个隐藏按钮(或真正做任何事情)取决于用户做出的选择。

有没有其他方法可以做到这一点? AdapterView 有一个 ClickListener 只是抛出一个异常,所以这是一个非首发。而且它似乎没有任何其他通知方案,用于用户第一次与它联系或关闭时......除非我错过了什么? (不会是第一次)。

感谢所有帮助。

【问题讨论】:

    标签: android


    【解决方案1】:

    我有一个 Spinner,当用户做出选择时,它需要显示一个隐藏的“继续”按钮。

    用户总是做出选择。没有选择就没有Spinner 的概念。因此,不要隐藏“继续”按钮。

    【讨论】:

    • 我不确定你在说什么。微调器首次加载时有一个默认选择(项目 0)。用户尚未“做出”该选择。它是为他们制作的。我知道作为开发人员可能会说“如果他们不费心选择,他们会选择默认值,默认情况下......但这不是我客户的要求。他们希望强制用户实际选择东西。
    • @Dr. Dredel:我的观点是Spinner 不能很好地支持您客户的模型。有三个选项。 1)。将额外的第一项添加到您的适配器,即“无选择”项,并检测用户何时关闭它。 2)。您的客户适应了Spinner 的行为,不再期望用户总是做出积极的选择。 3)。你为你的 UI 使用了其他东西(例如,singleChoiceListView),它支持没有选择的概念。最后一个选择包括您编写自己的小部件以按照您想要的方式运行的可能性。
    • 是的...我认为这些是我的选择。但这引出了一个有趣的后续问题。有没有办法编写一个自定义侦听器来侦听 Spinner 本身未广播的内容?例如,它弹出打开的那一刻或用户单击其中一个单选按钮的那一刻?
    • @Dr. Dredel:“有没有办法编写一个自定义监听器来监听 Spinner 本身不广播的东西?” -- 可能不会,除非将SpinnerAbsSpinner 克隆到您自己的项目中并更改代码。您总是有机会获得幸运,并且执行非事件事件的方法在 SDK 中,因此您可以覆盖它、链接到超类并触发您的事件。但是,这还远未确定。
    • @CommonsWar 我们可以使用自定义键 linster spiner.setOnKeyListener(l) 做点什么吗?
    【解决方案2】:

    我知道这本身不是解决方案,但从事情的声音来看,要求用户选择 SOMETHING 才能继续,对吗?如果您添加一个不相关的项目作为微调器中的第一个项目,并说“请选择一个...”之类的内容会怎样?将其作为默认选择的项目,那么用户将不得不做出不同的选择才能继续,因此,监听器将被触发。

    只是一个想法。 :)

    【讨论】:

    • 这实际上正是我所拥有的,直到客户下令他们不喜欢这是第一选择,所以,我又在绘图板上了 :)
    • 呸,太糟糕了! :) 不幸的是,我没有其他答案。 :P
    【解决方案3】:

    我在 stackoverflow 上的 few 答案中看到 onNothingSelected 将使您能够检测到这一点。

    这个答案是唯一的,没有被接受,我自己也没有尝试过,但试一试,看看会发生什么。

    【讨论】:

    • 伙计,这听起来太好了……我想到了当然!,我怎么会错过呢?!但遗憾的是,当您以编程方式从侦听器下方删除适配器数组的选定成员时,该(几乎完全无用的回调)就在那里。我想这在某些(极不可能的)情况下很有用,但更有用的是有人重新选择预选项目的更常见问题!我觉得我一定是错过了什么!如此普遍需要的东西怎么会如此明显地缺失?!
    猜你喜欢
    • 2011-11-03
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 2021-11-12
    • 2016-05-19
    • 1970-01-01
    相关资源
    最近更新 更多