2017-07-09 5 views
1

Ich lade Daten aus der SQLite-Datenbank in RecyclerView im Batch von 25 Datensätze pro Ladezyklus. Ich finde alles heraus, aber habe Probleme mit der Logik, die Methode zum Laden von Daten in RecyclerView-Scroll-Listener aufzurufen.
Problem ist Liste wird gut auf Scroll von recyclerView im Emulator geladen, aber wenn ich in physisches Gerät getestet, auf Lenovo Phab 2 es funktionierte gut, aber in Mi Note 3, listet nicht konsistent (irgendwann lädt es, irgendwann nicht) mehr Aufzeichnungen beim Erreichen der Unterseite der Bildlaufleiste.Endless RecyclerView Datenlade Logik ist nicht auf allen Geräten konsistent

Unten ist der Code, den ich in RecyclerView Scrolle Zuhörer bin mit

private val RecyclerView_ScrollListener = object : RecyclerView.OnScrollListener(){ 
    override fun onScrolled(recyclerView1: RecyclerView?, dx: Int, dy: Int) { 
     super.onScrolled(recyclerView1, dx, dy) 

     if (dy > 0) { 
      if (limit < rowCount_fromDatabase) { 
       visibleItemCount = layoutManager_MemberList.childCount 
       totalItemCount = layoutManager_MemberList.itemCount 
       firstVisibleItemPosition = layoutManager_MemberList.findFirstVisibleItemPosition() 

       if (visibleItemCount + firstVisibleItemPosition >= totalItemCount) { 
        limit += 25 
        load_Data() 
       } 
      } 
     } 
} 

Antwort

1

Ich hatte das gleiche Problem. Versuchen Sie diese

if (limit < returnedRowCount_fromDatabase) { 
    if((dy > 0) && (linearLayoutManager.findLastCompletelyVisibleItemPosition() == rowList.size() - 1)){ 
     limit += 25; 
     load_Data(); 
     } 
} 
0

ich eine class geschrieben haben, die mit allen Arten von LayoutManagers arbeitet. Es wurde auf Emulatoren und realen Geräten getestet.

Es verfügt über Blocker, um das doppelte Laden der nächsten Seite zu verhindern. Wenn Listener.onListEndReached() Wahr zurückgibt, wird es nicht erneut aufgerufen, bis RecyclerViewOnScrollUpdater.loading auf false gesetzt wird.

Sie können auch visibleThreshold einstellen und das Laden der Seite über die Einstellung enabled aktivieren/deaktivieren.

0

Was ich mehr bewegen ist:

 mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
     @Override 
     public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
      super.onScrolled(recyclerView, dx, dy); 
      if (!recyclerView.canScrollVertically(1)){ 
      //Load more data here. It will only trigger when you reach the end of your list and cannot scroll further 
      } 
     } 
    }); 

Hoffnung, das hilft.

Verwandte Themen