博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PopupWindow空指针异常的解决方案
阅读量:6379 次
发布时间:2019-06-23

本文共 2840 字,大约阅读时间需要 9 分钟。

hot3.png

错误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();

        }

    }

}

参考:

错误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)

参考:

转载于:https://my.oschina.net/u/1244156/blog/265117

你可能感兴趣的文章
力推农业电商大数据共享开放
查看>>
首届中国通信网络优化高级研讨会在京成功举行
查看>>
容器技术如何改变游戏服务器托管行业
查看>>
储能补贴有望出台?钱从哪来还是个问题
查看>>
防盗报警应用范围及未来市场发展分析
查看>>
《机器人爱好者(第1辑)》——导读
查看>>
先是 MSN “死”了,现在 MSN 中文网也要关闭了
查看>>
《需求设计:构建用户想要和需要的产品》——3.6 迭代
查看>>
Android L 设备默认的对数据进行加密
查看>>
扒掉红薯的内裤-深入剖析J2Cache
查看>>
《Adobe Photoshop CS5中文版经典教程(全彩版)》目录—导读
查看>>
《SEM长尾搜索营销策略解密》一一2.7 经济基础决定上层建筑,文化也是
查看>>
黑客攻击我们的 11 步详解及防御建议
查看>>
DataV地图组件全新发布,带你玩转地理大数据
查看>>
《产品设计与开发(原书第5版)》——2.7 Tyco 公司产品开发组织
查看>>
《Adobe Premiere Pro CS6中文版经典教程》——复习题
查看>>
《PaaS程序设计》一第3章 PaaS类型
查看>>
OSCer 开发的全新 OSChina iPhone 客户端
查看>>
IntelliJ IDEA 2016.3.1 发布,Java 开发工具
查看>>
《抓住听众心理——演讲者要知道的100件事》一5.听众有其心理模型
查看>>