PopupWindow错误:PopupWindow$1.onScrollChanged 出现 NullPointerException和PopupViewContainer.dispatchKeyEv…

PopupWindow错误:PopupWindow$1.onScrollChanged 出现 NullPointerException和PopupViewContainer.dispatchKeyEv…

PopupWindow错误:PopupWindow$1.onScrollChanged 出现 NullPointerException和PopupViewContainer.dispatchKeyEvent 出现 NullPointerException

错误1:

复制代码
java.lang.NullPointerException
at android.widget.PopupWindow$1.onScrollChanged(PopupWindow.java:127)
at android.view.ViewTreeObserver.dispatchOnScrollChanged(ViewTreeObserver.java:607)
at android.view.ViewRoot.draw(ViewRoot.java:1453)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1335)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1991)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:4385)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
at dalvik.system.NativeStart.main(Native Method)
复制代码

这个错误经常出现在Gingerbread或更早的版本,3.0以下。是系统的bug

解决方案:

new PopupWindow之后加上如下的方法进行检查即可,为了兼容3.0以下版本,这个操作还是必要的

复制代码
private void fixPopupWindow(final PopupWindow window) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
        try {
            final Field fAnchor = PopupWindow.class
                    .getDeclaredField("mAnchor");
            fAnchor.setAccessible(true);
            Field listener = PopupWindow.class
                    .getDeclaredField("mOnScrollChangedListener");
            listener.setAccessible(true);
            final ViewTreeObserver.OnScrollChangedListener originalListener = (ViewTreeObserver.OnScrollChangedListener) listener
                    .get(window);
            ViewTreeObserver.OnScrollChangedListener newListener = new ViewTreeObserver.OnScrollChangedListener() {
                @Override
                public void onScrollChanged() {
                    try {
                        WeakReference<View> mAnchor = (WeakReference<View>) fAnchor.get(window);
                        if (mAnchor == null || mAnchor.get() == null) {
                            return;
                        } else {
                            originalListener.onScrollChanged();
                        }
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                }
            };
            listener.set(window, newListener);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
复制代码

参考:

https://github.com/JakeWharton/ActionBarSherlock/issues/752

https://groups.google.com/forum/?fromgroups=#!msg/osmeditor4android/RsHYoY6XqlU/-WGSKWm5OMAJ

 

错误2:

复制代码
java.lang.NullPointerException
 at android.widget.PopupWindow$PopupViewContainer.dispatchKeyEvent(PopupWindow.java:1426)
 at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2627)
 at android.view.ViewRoot.deliverKeyEvent(ViewRoot.java:2592)
 at android.view.ViewRoot.handleMessage(ViewRoot.java:1881)
 at android.os.Handler.dispatchMessage(Handler.java:99)
 at android.os.Looper.loop(Looper.java:130)
 at android.app.ActivityThread.main(ActivityThread.java:3687)
 at java.lang.reflect.Method.invokeNative(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:507)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
 at dalvik.system.NativeStart.main(Native Method)
复制代码

解决方法:创建PopupWindow 的时候不调用 setFocusable(true),在showAtLocation后在调用setFocusable(true);并且在 dismiss的时候 调用setFocusable(false)

参考:

http://stackoverflow.com/questions/7768728/popupwindow-crash-on-dispatch-event

http://www.eoeandroid.com/thread-109193-1-1.html

转载于:https://www.cnblogs.com/xinye/p/3642678.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109864.html原文链接:https://javaforall.net

(0)
上一篇 2021年8月28日 下午9:00
下一篇 2021年8月28日 下午10:00


相关推荐

  • DB4O详细介绍

    DB4O详细介绍深入db4o深入db4o这是RickGrehan发表在TheServerSide上的一篇关于面向对象数据库–db4o的文章,较全面地介绍了db4o的关键特性,希望对大家认识db4o能有所帮助。(2007.12.07最后更新)db4o-针对对象的数据库-是一个完全的对象数据库;它以使对象在其生命周期中-无论是在数据库内或是在外-都保持着它们的本性这样一种方…

    2022年7月21日
    15
  • debug版本和release版本的区别

    debug版本和release版本的区别nbsp nbsp Debug 通常称为调试版本 它包含调试信息 并且不作任何优化 便于程序员调试程序 Release 称为发布版本 它往往是进行了各种优化 使得程序在代码大小和运行速度上都是最优的 以便用户很好地使用 nbsp nbsp Debug 和 Release 的真正秘密 在于一组编译选项 下面列出了分别针对二者的选项 nbsp Debug 版本 nbsp nbsp MDd MLd 或 MTd 使用 Debugr

    2026年3月17日
    2
  • 光流法原理与实现「建议收藏」

    光流法原理与实现「建议收藏」以下内容摘自一篇硕士论文《视频序列中运动目标检测与跟踪算法的研究》:1950年Gibson首先提出了光流的概念,光流(opticalflow)法是空间运动物体在观测成像面上的像素运动的瞬时速度。物体在运动的时候,它在图像上对应点的亮度模式也在做相应的运动,这种图像亮度模式的表观运动就是光流。光流的研究就是利用图像序列中像素的强度数据的时域变化和相关性来确定各自像素位置的“运动”。光流表达

    2022年7月23日
    13
  • NFV基本概念_nf缩写是什么意思

    NFV基本概念_nf缩写是什么意思1.NFV相关基本概念NFV(网络功能虚拟化)SDN(软件定义网络)一个NFV的标准架构包括NFVinfrastructure(NFVI),MANO(ManagementandOrchestration)和VNFs,三者是标准架构中顶级的概念实体。NFVI(NFVInfrastructure)包含了虚拟化层(hypervisor或者容器管理系统,如Docker,以及vSwitch…

    2025年10月17日
    5
  • Div+CSS – 简单布局

    Div+CSS – 简单布局Div+CSS – 简单布局

    2022年4月22日
    51
  • 不用Root卸载安卓软件

    不用Root卸载安卓软件排除之前博文发布的那么多输入命令的地方 直接集成到一个软件里 只需动动鼠标即可完成

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号