欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > Android >内容正文

Android

【Android开发坑系列】之PopupWindow

发布时间:2025/3/15 Android 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【Android开发坑系列】之PopupWindow 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
  • PopupWindow在4.0之前的版本有个系统级别的BUG,必须借助一段自定义的fix代码来修复。其中mPopPm就是PopupWindow实例。
    java.lang.NullPointerException
    at android.widget.PopupWindow$1.onScrollChanged

    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(mPopPm);ViewTreeObserver.OnScrollChangedListener newListener =new ViewTreeObserver.OnScrollChangedListener() {public void onScrollChanged() {try {View mAnchor = (View) fAnchor.get(mPopPm);if (mAnchor == null) {return;} else {originalListener.onScrollChanged();}} catch (Exception e) {e.printStackTrace();}}};listener.set(mPopPm, newListener);} catch (Exception e) {e.printStackTrace();}
  • 在生成popupWindow的父Activity销毁之前,需要销毁popupWindow。否则会报内存泄露(leak)。也即在Activity的onDestroy()执行如下代码:
    if (mPopupWindow != null) {mPopupWindow.dismiss();mPopupWindow = null;}
  • 在<=2.3的系统上,慎用setFocusable(boolean),一般设为mPopPm.setFocusable(false)
  • 转载于:https://www.cnblogs.com/kaima/p/3160897.html

    总结

    以上是生活随笔为你收集整理的【Android开发坑系列】之PopupWindow的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。