2013-08-05 70 views
0

我有一個ListView與自定義適配器,我加載信息。我加載從DB retrived的所有數據到一個ArrayList(所有的數據是存在的),我複製我需要的數據,我向下滾動到另一ArrayList中,以顯示它:ListView isScrollCompleted()問題

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;   
} 

我得到的問題是,當我到達我的列表視圖的底部時,我一直加載數據直到應用程序崩潰。我得到列表視圖底部和footerview int的所有的時間,他們是一樣的,就像我一直在向下滾動,但我不是。
這是怎麼發生的?我正在通知我的適配器。

回答

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;   

}