2017-05-23 7 views
0

Ich versuche, mehr Elemente zu laden, wenn Sie nach dem letzten Element von RecyclerView nach unten scrollen, aber nichts passiert. Es ruft nur einmal zum Zeitpunkt des Ladens des Bildschirms &, nachdem nichts passiert, obwohl ich scrollte & zum letzten Element bewegen.RecyclerView Paginierung funktioniert nicht

Unten ist mein Code

inspectionRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView_Inspections); 
      final LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); 
      inspectionRecyclerView.setLayoutManager(mLayoutManager); 

inspectionRecyclerView.setOnScrollListener(new EndlessRecyclerOnScrollListener(
       mLayoutManager) { 
      @Override 
      public void onLoadMore(int current_page) { 
       // do somthing... 

       Log.v("Call", "Load more"); 
//api call to load more items goes here 

      } 

     }); 

Scroll Teilecode

public abstract class EndlessRecyclerOnScrollListener extends 
     RecyclerView.OnScrollListener { 
    public String TAG = EndlessRecyclerOnScrollListener.class 
      .getSimpleName(); 

    private int previousTotal = 0; 
    private boolean loading = true; 
    private int visibleThreshold = 5; 
    int firstVisibleItem, visibleItemCount, totalItemCount; 

    private int current_page = 1; 

    private LinearLayoutManager mLinearLayoutManager; 

    public EndlessRecyclerOnScrollListener(
      LinearLayoutManager linearLayoutManager) { 
     this.mLinearLayoutManager = linearLayoutManager; 
    } 

    @Override 
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
     super.onScrolled(recyclerView, dx, dy); 

     visibleItemCount = recyclerView.getChildCount(); 
     totalItemCount = mLinearLayoutManager.getItemCount(); 
     firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition(); 

     if (loading) { 
      if (totalItemCount > previousTotal) { 
       loading = false; 
       previousTotal = totalItemCount; 
      } 
     } 
     if (!loading 
       && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) { 
      // End has been reached 

      // Do something 
      current_page++; 

      onLoadMore(current_page); 

      loading = true; 
     } 
    } 

    public abstract void onLoadMore(int current_page); 
} 

Bitte helfen Sie mir.

Antwort

1

Hallo dies überprüfen, ob es

1) hilft, wenn ich diese Tätigkeit beginne ich meine Daten vom Server speichern nenne es die Sammlung namens activitiesData.

2) activitiesData hat jetzt meine Daten, die ich in RecyclerView anzeigen möchte.

3) Ich befüllen die RecyclerView mit activitiesData. Jetzt

4) möchten Sie ein scrollListener auf Code einen Blick

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 

      @Override 
      public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
       super.onScrollStateChanged(recyclerView, newState); 
      } 

      @Override 
      public void onScrolled(final RecyclerView recyclerView, int dx, int dy) { 
       super.onScrolled(recyclerView, dx, dy); 

       //activitiesData is collection used to populate the recycler Adapter 
       activitiesData.remove(activitiesData.size() - 1); 
           recyclerViewAdapter.notifyItemRemoved(activitiesData.size()); 

       // Make a networking call to get the data on page scrolled 

       //after you get response 
       recyclerViewAdapter.notifyDataSetChanged();     
      } 
     }); 
0

Ich verwende folgenden Code und seine Arbeit für mich. Vergessen Sie nicht, den Ladewert auf FALSE zu setzen, nachdem Ihr API-Anruf abgeschlossen ist.

public RecyclerView.OnScrollListener getOnScrollListener() { 
     return new RecyclerView.OnScrollListener() { 
      @Override 
      public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 

       if (dy > 0) { 
        visibleItemCount = lm.getChildCount(); 
        totalItemCount = lm.getItemCount(); 
        pastVisibleItem = lm.findFirstVisibleItemPosition(); 
        if (!isLoading) { 
         if ((visibleItemCount + pastVisibleItem) >= totalItemCount) { 
          isLoading = true; 
          loadNextPage(); 
         } 
        } 
       } 
      } 
     }; 
    }