5

Ist es möglich, einen Sichtbarkeits-Listener auf jedem Listenansicht-Element zu haben? Like: auf Benutzer sieht der Artikel, etwas tun. Wenn das Objekt verborgen ist, tun Sie etwas anderes.ListView (Adapter) Element Sichtbarkeit Listener

Ich möchte prüfen, ob ein Element den Bildlauf "eingibt" oder "beendet", um eine zweite Liste zu aktualisieren.

Additionaly könnte meine Listview erweitern wie:

adapter.addAll( (Collection<? extends DBObject>) events); 
adapter.notifyDataSetChanged(); 

ich eine Art und Weise denken könnte einen globalen Zuhörer zu benutzen, um die Elemente zu überprüfen, aber ich fürchte, es wird, wenn ich weitere Elemente in die Listview Gelingt verkorkst (über). Ich habe damit noch nichts erreicht

eventList.setOnScrollListener(new OnScrollListener() { 

     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 

     } 

     @Override 
     public void onScrollStateChanged(AbsListView view, int scrollState) {} 
}); 

Antwort

6

Sie können die onScroll-Funktion verwenden, um dies zu berechnen.

eventList.setOnScrollListener(new OnScrollListener() { 
    int oldFirstVisibleItem = 0; 
    int oldLastVisibleItem = 0; 

    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
     if (firstVisibleItem > oldFirstVisibleItem) { 
      for(int i = oldFirstVisibleItem; i < firstVisibleItem; i++) { 
       onExit(i); 
      } 
     } 
     if (firstVisibleItem < oldFirstVisibleItem) { 
      for(int i = firstVisibleItem; i < oldFirstVisibleItem; i++) { 
       onEnter(i); 
      } 
     } 

     int lastVisibleItem = firstVisibleItem + visibleItemCount - 1; 
     if (lastVisibleItem < oldLastVisibleItem) { 
      for(int i = oldLastVisibleItem+1; i <= lastVisibleItem; i++) { 
       onExit(i); 
      } 
     } 
     if (lastVisibleItem > oldLastVisibleItem) { 
      for(int i = oldLastVisibleItem+1; i <= lastVisibleItem; i++) { 
       onEnter(i); 
      } 
     } 

     oldFirstVisibleItem = firstVisibleItem; 
     oldLastVisibleItem = lastVisibleItem; 
    } 

    @Override 
    public void onScrollStateChanged(AbsListView view, int scrollState) {} 
}); 

public void onEnter(int position) { 
    // Handle an item coming into view. 
} 

public void onExit(int position) { 
    // Handle an item going out of view. 
} 
2

Die Antwort ist in Ihrer Frage.

Eine der Methoden, die Sie in der onScrollListener außer Kraft setzen() ist

public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 

     } 

Die übergebenen Parameter umfassen die firstVisibleItem und die visibleItemCount. Sie können diese beiden Zahlen verwenden, um herauszufinden, welche Objekte gerade sichtbar sind.

Denken Sie daran, dass onScroll beim Scrollen sehr oft aufgerufen wird.

Verwandte Themen