ListView に何千ものアイテムを表示するタスクがあります。したがって、これらのアイテムのデータをメモリにロードする必要があります。ただし、各項目のデータは 1KB を超えるため、すべてのデータをメモリにロードするとメモリが枯渇し、OOM 例外が発生します。実際、最初はこれらのデータの一部のみをロードし、ユーザーが ListView の一番下までスクロールすると、さらに多くのデータが ListView に追加されます。しかし、ユーザーが一番下までスクロールし続けると、最後にすべてのデータがメモリにロードされ、OOM が表示されます。
この問題を解決するために、ListView の長さに最大制限を設定できると思います。たとえば、最大長を 500 に設定します。ユーザーが ListView の下部までスクロールし続けると、ListView の最後に 50 個の新しい項目を追加し、同時にその上部から 50 個の項目を削除するため、最大長ListView の同じままにします。新しいアイテムを最後に追加し、古いアイテムを ListView の先頭から削除する方法は知っていますが、これを一緒に実行しようとすると、奇妙なことが起こり、ListView の内容が期待どおりになりません。
それで、私の問題を解決する方法を知っている人はいますか?
有用な回答をいただければ幸いですが、アイテムのデータ サイズを変更するように依頼しないでください。私にはそれを行う権利がありません。
疑似コード (scrollListener は ListView に設定されます):
class MyOnScrollListener implements OnScrollListener{
public void onScrollChange(View, int, int, int){
if(reach the bottom){
add50ItemsToTheBottomOfTheList();
remove50FromTheTopOfTheList();
myListViewAdapter.notifyDataSetChanged();
}
}
}