【问题标题】:Onkeydown what's the diference between return false and return super.onkeydown()?Onkeydown return false 和 return super.onkeydown() 有什么区别?
【发布时间】:2016-02-15 03:37:53
【问题描述】:

我在线性布局中放置了一个列表视图,我想覆盖 ListView 中的 onkeydown() 方法 ,而且我不控制焦点,只是改变onkeydown()中的一些变量,我希望系统像我没有覆盖onkeydown方法一样。我该怎么办?返回false?或返回 super.onkeyDown()?。任何帮助都会非常好。提前谢谢你。

共有三个列表视图,a b c 是三个列表视图项。当 c 获得焦点时,当我按键盘上的左箭头时,默认情况下会获得焦点。我希望 listview2 中的第一项获得焦点,我该怎么办?

【问题讨论】:

    标签: android


    【解决方案1】:

    ntc 并不完全正确。操作系统不使用反射来获取您的基类的处理程序。

    如果你返回 false,你明确告诉操作系统你不想处理这个事件;然后操作系统调用视图的父处理程序(如您的测试所示);这种情况会一直发生,直到事件得到处理或到达顶部视图。

    如果你调用 super.OnKeyDown() 你允许你的基类处理事件。请注意,它是提供相同视图的基类处理程序,而不是父视图;不要在这里混淆。

    因此,使用其中一个取决于您所需的视图行为。

    我想在你的情况下你需要return super.onKeyDown();

    【讨论】:

    • 是的,你说得对,我明白了。在我的情况下,我应该返回 super.onkeydown()。但是我发现焦点的变化总是不喜欢我想要的。
    • 如果 UI 不允许您这样做,您可能需要三思而后行。用户不应对意外的 UI 行为感到困惑。
    • 系统默认的焦点变化会让用户感到困惑,我想要的只是调整它正常..我会发张图片说明一下
    • 对不起,我帐户的声誉是 5 小于 10 ,我无法在我的问题中添加图片....
    • 这应该是另一个问题了 :) 请注意,Android 在两种模式下工作:可聚焦和无聚焦。这两个开关取决于用户输入:用户按下键盘上的一个键 - 它变成可聚焦模式;如果用户触摸屏幕 - 它会变成无焦点模式。在无焦点模式下,NO 列表项被聚焦。
    【解决方案2】:

    super.onkeyDown()- 这让超类有责任按照您自己的意愿处理onKeyDown 事件(您明确表示要处理它)。当您返回false 时,android 会假定您尚未处理onKeyDown 事件,并且默认情况下会调用super.onKeyDown()(没有您调用它)。

    【讨论】:

    • em...也许当返回false时,父视图而不是父类将处理onkeyDown。
    • em..我只是创建了一个扩展列表视图的 FileListView 类。我把它放在一个线性布局中。如果 onkeydow,则重新运行 flase.then linearlayout 将处理它,如果返回 super.onkeydown,listView 将处理它?对吗?这是我不确定的理解。
    猜你喜欢
    • 2014-05-24
    • 2011-08-26
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多