私は自分のアプリケーションの 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;
}
私は次のことについて非常に興味があります。
EndlessAdapter
1)独自の実装でデータをキャッシュしたい場合にのみ実装が例外をスローする理由、AsyncTask
つまり、カスタム実装なしでendlessAdapter.setRunInBackground(false);
使用する場合はそうではありませんendlessAdapter.setRunInBackground(true);
AsyncTask
2) ListView の進行状況インジケーター項目をクリックした場合にのみ例外が発生するため、ListView
項目のクリックとgetCount()
メソッドには何らかの関係があります。ListView
前もって感謝します :)