android java.lang.IllegalArgumentException: The observer is null.異常解決


今天把android系統更新到4.0后運行以前開發的程序,出現java.lang.IllegalArgumentException: The observer is null.異常錯誤,

在網上查找出錯原因和解決方案,找到兩篇解釋的比較清楚的文章,具體內容如下:

一,原因:

是因為4.0系統android.widget.AbsListView.onDetachedFromWindow第一次調用的時候會把observer設置為null,onDetachedFromWindow方法的作用是當view離開窗口時調用,而我在每次view離開窗口並沒有銷毀,因為后面要用到,所以當第二次重用view的時候在remove view時就會再次的調用onDetachedFromWindow,所以就會出現這樣的錯誤,具體可以查看4.0和2.3的源碼onDetachedFromWindow方法源碼。

二,解決方法:

之前容器container每次都是removeAllViews()再addView,4.0以后這樣做已經不行了,那么現在我們不要每次都removeAllViews,而是每次檢測容器container中的view,如果view存在那么就設置view為可見,如果不存在那么就addview。

具體代碼:

boolean flag = false; //判斷View是否存在
        View view = activityManager.startActivity(id, intent).getDecorView();
        for (int i = 0; i < viewList.size(); i++) { //遍歷viewList設置顯示或隱藏,viewList 是一個List<View>
            if (null != viewList.get(i) && !viewList.get(i).equals(view)) {
                viewList.get(i).setVisibility(View.GONE);
            } else if (null != viewList.get(i) && viewList.get(i).equals(view)) {
                viewList.get(i).setVisibility(View.VISIBLE);
                flag = true;
            }
        }

        if (!flag) {
            contentViewLayout.addView(view, contentViewLayoutParams);
            viewList.add(view);
        }

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM