情報をロードするカスタムアダプターを備えた ListView があります。DB から取得したすべてのデータを ArrayList にロードしています (すべてのデータがそこにあります)。必要なデータをコピーして、表示するために別の ArrayList にスクロールします。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.all_products);
footerView = ((LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_view, null, false);
lv = (ListView) findViewById(R.id.lista);
lv.setOnScrollListener(new OnScrollListener() {
private void isScrollCompleted() {
if (lv.getHeight() == footerView.getBottom(){
update();
}
public void update(){
cargando=true;
lv.removeFooterView(footerView);
eventos=generarClaseEventos(null, eventosFULL,eventos);
adapter = new MyClassAdapter(AllProductsActivity.this,R.id.lista,eventos);
Comparator<Evento> comparador = new Comparator<Evento>() {
@Override //metodo que compara fechas
public int compare(Evento e1, Evento e2) {
if (e1 == null) return 1;
return e1.getFecha().compareTo(e2.getFecha());
}
};
int index= lv.getFirstVisiblePosition(); //almaceno el indice y la posición
View v = lv.getChildAt(0);
int top = (v == null) ? 0 : v.getTop();
adapter.sort(comparador);//llamo al metodo sort que ordena
lv.addFooterView(footerView);
lv.setAdapter(adapter);
adapter.notifyDataSetChanged();
lv.setSelectionFromTop(index, top); //restauro la posicion
cargando=false;
}
私が得ている問題は、リストビューの一番下に到達すると、アプリがクラッシュするまで常にデータが読み込まれることです。リストビューの下部とフッタービューのintを取得していますが、常に下にスクロールしているように、それらは常に同じですが、そうではありません。
なぜこうなった?アダプターに通知しています。