zoukankan      html  css  js  c++  java
  • [BUG记录]java.lang.IllegalArgumentException: The observer is null.异常解决方案

    今天在调用LinearLayout的removeAll方法时出现一个奇怪的bug,

    java.lang.IllegalArgumentException: The observer is null.

    android2.3正常,而android4.0出现。

    后来经过研究发现是因为4.0系统android.widget.AbsListView.onDetachedFromWindow第一次调用的时候会把observer设置为null,

    onDetachedFromWindow方法的作用是当view离开窗口时调用,而我在每次view离开窗口并没有销毁,因为后面要用到,所以

    当第二次重用view的时候在remove view时就会再次的调用onDetachedFromWindow,所以就会出现这样的错误,具体可以查看

    4.0和2.3的源码onDetachedFromWindow方法源码。

    1.因为我是做一个类似5个底部导航键的东西,所以我是这么解决的,不调用removeview了,直接把view的引用缓存起来,然后设置为gone.再想

    展示的时候直接设置成visiable。

    代码是

    点击选项卡后 传一个参数  t  为要启动的界面号

    View currentView = getLocalActivityManager().startActivity(t + "", intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))     .getDecorView();    //展示控制:遍历list中的view,与当前view不同则设置为不显示,否则显示    for(int i =0;i<viewList.size();i++){     if(null!=viewList.get(i)&&!viewList.get(i).equals(currentView)){      viewList.get(i).setVisibility(View.GONE);     }else if(null!=viewList.get(i)&&viewList.get(i).equals(currentView)){      viewList.get(i).setVisibility(View.VISIBLE);     }    } //   mActivityContainer.removeAllViews();    //存储控制:list中存储的对应位置的view和当前view不同时进行存储    if(null==viewList.get(t)||!viewList.get(t).equals(currentView)){     mActivityContainer.addView(currentView);     viewList.add(t,currentView);    }

    曲线救国吧 嘿嘿。

    2.也参考了别人的代码

    如果你的viewgroup有adapter,那就简单了,在adapter中重写 @Override public void unregisterDataSetObserver(DataSetObserver observer) {      if (observer != null) {          super.unregisterDataSetObserver(observer);      } }

    直接就可以了

    3.或者我猜测还有一种解决方法,在每次view离开窗口时销毁。 大概是view.destroyDrawingCache(),或者别的什么销毁方法。 没试验不知道效果如何仅供参考。

  • 相关阅读:
    ASP.NET 缓存技术分析
    asp.net中两款文本编辑器NicEdit和Kindeditor
    VS2005,VS2008,VS2010将ASP.NET网站编译成一个DLL文件
    公共的Json操作C#类
    怎么把100多个EXCEL文件合并成一个
    C# ToString()方法一些特殊用法
    C# 将数据导出到Execl汇总
    ASP.NET MVC中在Action获取提交的表单数据方法总结
    vue实现锚点定位跳转(当前页面跳转,url不变)
    es6 去除小数点后,不四舍五入
  • 原文地址:https://www.cnblogs.com/hpboy/p/3031989.html
Copyright © 2011-2022 走看看