zoukankan      html  css  js  c++  java
  • 【Android开发坑系列】之PopupWindow

    1. 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();
                  }
    2. 在生成popupWindow的父Activity销毁之前,需要销毁popupWindow。否则会报内存泄露(leak)。也即在Activity的onDestroy()执行如下代码:
              if (mPopupWindow != null) {
                  mPopupWindow.dismiss();
                  mPopupWindow = null;
              }
    3. 在<=2.3的系统上,慎用setFocusable(boolean),一般设为mPopPm.setFocusable(false)
  • 相关阅读:
    Mac下tomcat的安装与配置
    jquery中的属性和css
    jquery中的选择器
    数组对象元素的添加,String对象,BOM对象以及文档对象的获取
    js中的函数,Date对象,Math对象和数组对象
    js中的循环语句
    js中的运算符和条件语句
    js中的数据类型及其转换
    js的意义,引用方法及变量
    移动端网页项目总结
  • 原文地址:https://www.cnblogs.com/kaima/p/3160897.html
Copyright © 2011-2022 走看看