首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在安卓4.1.x上取消ActionBar溢出菜单时出现警告

在安卓4.1.x上取消ActionBar溢出菜单时出现警告
EN

Stack Overflow用户
提问于 2013-03-02 22:02:53
回答 1查看 12.4K关注 0票数 18

这是我收到的警告:

03-02 14:38:43.980: W/InputEventReceiver(3961): Attempted to finish an input event but the input event receiver has already been disposed.

我的菜单是从一个常规的res/menu/activity_menu.xml文件生成的。我正在处理的事件与http://developer.android.com/guide/topics/ui/menus.html#options-menu上的细节完全相同

当我单击垂直的三个点以打开溢出菜单并取消它时,我收到该警告。人们似乎对如何抓住它的导火索知之甚少。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-09 14:03:47

这与你的工作无关。

溢出菜单是由PopupWindow实现的。当用户触摸关闭PopupWindow时,ACTION_DOWN事件将排队到应用程序的消息队列中。然后通过ViewPostImeInputStage类将其传递给View,最后ViewPostImeInputStage将此输入事件发送到PopupWindow的onTouchEvent侦听器。

代码语言:javascript
复制
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        final int x = (int) event.getX();
        final int y = (int) event.getY();

        if ((event.getAction() == MotionEvent.ACTION_DOWN)
                && ((x < 0) || (x >= getWidth()) || (y < 0) || (y >= getHeight()))) {
            dismiss();
            return true;
        } else if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
            dismiss();
            return true;
        } else {
            return super.onTouchEvent(event);
        }
    }

dissmiss()尝试先关闭PopupWindow和PopupWindow::onDetachedWindow调用WindowInputEventReceiver::dispose()

然后ViewPostImeInputStage调用WindowInputEventReceiver::finishInputEvent来完成该ACTION_DOWN事件。但是,WindowInputEventReceiver实例已经被释放,因此它会抛出警告消息。

您可以通过断点进行调试。打开InputEventReceiver.java(需要android源码在InputEventReceiver.java/base/),在dispose方法设置断点。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15175352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档