0

情報をロードするカスタムアダプターを備えた 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を取得していますが、常に下にスクロールしているように、それらは常に同じですが、そうではありません。
なぜこうなった?アダプターに通知しています。

4

1 に答える 1

0

解決済み:

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();       
   footerView = ((LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_view, null, false);          
   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;          

}

于 2013-08-05T10:01:12.800 に答える