2012-10-26 56 views
2

我在我的應用程序的一個整合commonsguy/cwac-endless EndlessAdapter和它的工作真的很棒!由於CommonsWare爵士:)java.lang.IllegalStateException在CommonsGuy EndlessAdapter

但我正在逐漸java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification

注:此異常,只有當我使用endlessAdapter.setRunInBackground(false);時,基本上當我想我自己的實現的AsyncTask緩存數據(在EndlessAdapter類的cacheInBackground()方法執行AsyncTask)。

步驟來創建此IllegalStateException異常:

步驟1)運行EndlessAdapterCustomTaskFragmentexampleEndlessAdapter

步驟2中提供的演示)滾動的ListView下來,讓發展觀爲獲取的可見光。

步驟3)點擊進度視圖。現在,一旦數據加載時單擊進度視圖,應用程序將使用java.lang.IllegalStateException關閉強制。

爲了克服這個問題,我重寫以下EndlessAdapter類的方法,它果然奏效;)

@Override 
    public boolean areAllItemsEnabled() { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean isEnabled(int position) { 
     // TODO Auto-generated method stub 
     return getItem(position) != null; 
    } 

我很好奇,想知道以下幾點:

1)爲什麼EndlessAdapter實現拋出異常,只有當我想我自己的實現的AsyncTask緩存數據,即endlessAdapter.setRunInBackground(false);但使用endlessAdapter.setRunInBackground(true);不用時沒有自定義我的AsyncTask

2 mplementation)有點擊ListView項和的ListViewgetCount()方法之間的某些關係,因爲它點擊ListView的進度指示符的項目時只生成異常。

在此先感謝:)

回答

1

感謝您爲此問題提供可重現的測試案例。我做了兩個改動EndlessAdapter試圖解決這一問題,包括合併你上面列出的areAllItemsEnabled()/isEnabled()修復的變化。這已被提交併標記爲v1.2。如果當你移動到庫V1.2,你將需要刪除的areAllItemsEnabled()isEnabled()自己的覆蓋。

爲什麼EndlessAdapter實現只有當我想自己實現AsyncTask來緩存數據時拋出異常,例如endlessAdapter.setRunInBackground(false);但不使用endlessAdapter.setRunInBackground(true);沒有自定義的AsyncTask實現

通過onException()提供給您的例外,您可以覆蓋該例外。這是爲了確保在主應用程序線程上得到異常,即使在由EndlessAdapter管理的後臺線程中可能導致異常。

有咔嗒ListView項和ListView的getCount將()方法之間的某些關係,因爲它點擊ListView的進度指示符的項目時只生成異常。

這是在執行ListView

+0

感謝您的回覆。另外我在'EndlessAdapter'實現中發現了另外一個錯誤。 –

相關問題