私は自分のアプリケーションの 1 つにcommonsguy / cwac-endless EndlessAdapter を統合していましたが、本当にうまくいきました! CommonsWare卿に感謝します:)
しかし、私は得てjava.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notificationいます。
注: この例外は、 を使用する場合にのみ発生しますendlessAdapter.setRunInBackground(false);。基本的には、独自の実装でAsyncTaskデータをキャッシュする ( EndlessAdapter クラスのメソッドで実行する)AsyncTask場合にのみ発生します。cacheInBackground()
この IllegalStateException を再作成する手順:
ステップ 1)のデモとして提供されているEndlessAdapterCustomTaskFragment 例を実行するEndlessAdapter
ステップ 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;
}
私は次のことについて非常に興味があります。
EndlessAdapter1)独自の実装でデータをキャッシュしたい場合にのみ実装が例外をスローする理由、AsyncTaskつまり、カスタム実装なしでendlessAdapter.setRunInBackground(false);使用する場合はそうではありませんendlessAdapter.setRunInBackground(true);AsyncTask
2) ListView の進行状況インジケーター項目をクリックした場合にのみ例外が発生するため、ListView項目のクリックとgetCount()メソッドには何らかの関係があります。ListView
前もって感謝します :)