2012-06-20 57 views
10

我對崩潰的ListView.removeFooterView(查看)

android.widget.ListView lv; lv.removeFooterView(v) 

錯誤越來越崩潰報告是空指針異常。我檢查listView本身不是null。這是什麼原因?是否有必要確保要刪除的視圖不爲空?這是足夠的還是我首先還需要檢查頁腳視圖實際上是否已添加?

java.lang.NullPointerException 
at android.widget.ListView.removeFooterView(ListView.java:374) 

在我看來,這種方法應該是足夠強大,不死機!爲什麼它不能僅僅在不能刪除視圖的情況下返回false?

PS。我想知道是否有其他人看到了這個?

回答

13

不幸的是,你不提什麼Android版本的錯誤報告的來源。然而,看看源代碼,Android 2.1-update1似乎是一個不錯的選擇。

我會在整個方法只是複製到把事情說清楚:

public boolean removeFooterView(View v) { 
    if (mFooterViewInfos.size() > 0) { 
     boolean result = false; 
     if (((HeaderViewListAdapter) mAdapter).removeFooter(v)) { // <- line 274 
      mDataSetObserver.onChanged(); 
      result = true; 
     } 
     removeFixedViewInfo(v, mFooterViewInfos); 
     return result; 
    } 
    return false; 
} 

現在比較上述removeFooterView(...)方法具有更近的平臺實現:

public boolean removeFooterView(View v) { 
    if (mFooterViewInfos.size() > 0) { 
     boolean result = false; 
     if (mAdapter != null && ((HeaderViewListAdapter) mAdapter).removeFooter(v)) { 
      if (mDataSetObserver != null) { 
       mDataSetObserver.onChanged(); 
      } 
      result = true; 
     } 
     removeFixedViewInfo(v, mFooterViewInfos); 
     return result; 
    } 
    return false; 
} 

正如你所看到的,對於某些不是null的成員,我補充了一些額外的支票。這表明,如果mAdapter == null,第一種方法確實會在第274行失敗,而這不會導致新的實現崩潰。

要解決它,你可能需要做的是試圖刪除頁腳視圖之前添加類似lv.getAdapter() != null

+0

添加頁腳的策略是什麼?我對升級Froyo再次得到這個錯誤,並且listView.getFooterCount()> 0 –

+1

工作圍繞「lv.getAdapter()!= NULL」對我來說 – djleop

+0

工作,我只好打電話給removeFooter()後,我設置適配器的可能性。 – salcosand

0

如果你看看,你會發現,這其實是這樣的文件:

http://developer.android.com/reference/android/widget/ListView.html)

返回

真如果視圖被刪除,假如果視圖不是頁腳視圖

所以你應該爲視圖和listView添加一個空檢查,或者如果這是一個exc可選狀態(很少發生,然後將其包裝在異常塊中)。

+0

結束語一個空指針異常塊仍將崩潰! –

+0

該文檔並不表示嘗試刪除空視圖會導致應用程序崩潰。 –

+0

我不認爲刪除空視圖會導致應用程序崩潰。我認爲它可能是空適配器。 –