1. 程式人生 > >java.lang.IllegalArgumentException: The observer is null.異常解決

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

出現場景: 我的程式碼實現是由一個fragment顯示另一個fragment; 我沒有使用replace實現, 而是使用的是add的形式, 然後擷取到系統的返回方法進行的返回, 但是問題就出現在這, 當我顯示第二個fragment之後, 我返回第一個fragment的時候, 就會崩潰, 丟擲異常就是java.lang.IllegalArgumentException: The observer is null.

異常原因: 感覺很奇怪, 就查了查網上的解釋發現: 重點內容我顯示第二個fragment的時候沒有銷燬視窗, 只是給他覆蓋了, 而我在第一次載入第一個fragment的時候, 呼叫onDetachedFromWindow();會把observer設定成null所以當第二次重用的時候在remove view時就會再次的呼叫onDetachedFromWindow();就會出現上邊的那個錯誤;

解決辦法:在adapter裡重寫方法
第一種, 當前使用的是RecyclerView

@Override
    public void unregisterAdapterDataObserver(RecyclerView.AdapterDataObserver observer) {
        if (observer != null){
            super.unregisterAdapterDataObserver(observer);
        }
    }

第二種: 當前使用的listview

@Override  
public void
unregisterDataSetObserver(DataSetObserver observer) { if (observer != null) { super.unregisterDataSetObserver(observer); } }

ps: 個人是隻當第二個fragment通過listview或者是recyclerview加載出現資料才會丟擲這個異常!