2017-02-13 10 views
-1

동일한 문제에 관해 많은 질문이 있지만 문제를 찾을 수 없다는 것을 알고 있습니다. HttpRequest 클래스에서 URL을 인쇄 할 때 올바른 URL을 표시하지만 여전히 동일한 데이터를로드하고 있습니다. 여기RecyclerView Endless Scroll

recyclerView.addOnScrollListener(new asd(manager ) { 
       boolean loading = false; 
       int scrollIndex = 1; 
       @Override 
       public void onScrolledToEnd() { 

        if(!loading){ 
         loading = true; 
         try { 
          scrollIndex = scrollIndex+10; 
          String url = "https // xyz com?q=" + query + "&scrollIndex="+ scrollIndex + "&key=" + getResources().getString(R.string.api_key); 
          new HttpRequest(url,SearchActivity.this).execute(); 
          adapter.notifyItemRangeChanged(list.size(),10); 
          adapter.notifyDataSetChanged(); 
         } catch (MalformedURLException e) { 
          e.printStackTrace(); 
         } 

        } 
        loading = false; 
       } 
      }); 

내가 이것을 사용 OnScrollListener

public abstract class asd extends RecyclerView.OnScrollListener { 


    public static String TAG = asd.class.getSimpleName(); 

    // use your LayoutManager instead 
    private LinearLayoutManager llm; 

    public asd(LinearLayoutManager sglm) { 
     this.llm = sglm; 
    } 

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

     if (!recyclerView.canScrollVertically(1)) { 
      onScrolledToEnd(); 
     } 
    } 

    public abstract void onScrolledToEnd(); 
} 

답변

0

이며 어쩌면 당신은 당신의 특정한 경우에 맞게 값을 조금 주위를 재생할 수 있고, 일하고있어. 그러나 나는 그것이 도움이되기를 바랍니다 : 여기에

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

    @Override 
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
     super.onScrolled(recyclerView, dx, dy); 
     LinearLayoutManager linearLayoutManager = ((LinearLayoutManager)mRecyclerView.getLayoutManager()); 
     int visibleItemCount = linearLayoutManager.getChildCount(); 
     int totalItemCount = linearLayoutManager.getItemCount(); 
     int firstVisibleItemPosition = linearLayoutManager.findFirstVisibleItemPosition(); 

     //Log.d(TAG,"Visible="+visibleItemCount+", total="+totalItemCount+", first="+firstVisibleItemPosition); 

     if ((visibleItemCount + firstVisibleItemPosition) >= totalItemCount 
       && firstVisibleItemPosition >= 0 
       && totalItemCount >= pageSize) { 
      //Log.d(TAG,"Entrato, lancio"); 
      loadMoreItems(); 
     } 
    } 
}); 

pageSize 내가 때마다로드있어 요소의 수입니다; loadMoreItems() 메서드는 인터넷에서 데이터를 가져 와서 어댑터에 알릴 책임이 있습니다.

+0

어떻게 내가 API를 통해 페이지를 매기 수

public abstract class EndlessRecyclerOnScrollListener extends RecyclerView.OnScrollListener { public static String TAG = EndlessRecyclerOnScrollListener.class .getSimpleName(); int maxCount; 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,int maxCount) { this.mLinearLayoutManager = linearLayoutManager; this.maxCount = maxCount; } @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(totalItemCount>=maxCount){ loading=false; return; } 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);} 
? loadMoreItems() 구현이 정확합니까? – user6556461

+0

이것은 당신에게 달렸습니다. 귀하의 API가 어떻게 작동하는지 모르겠습니다. –

+0

10 개 항목마다 페이지 매김을하고 startIndex를 10 씩 증가시키는 URL의 startIndex가 필요합니다. 문제는 코드에서 내 startIndex가 10 씩 증가하고 항목 만 추가는 항상 이전 URL에서 이루어짐 – user6556461

0

사용하십시오.

LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); 
     mRecyclerView.setLayoutManager(mLayoutManager); 
     mRecyclerView.addOnScrollListener(new EndlessRecyclerOnScrollListener(mLayoutManager,maxCount) { 
      @Override 
      public void onLoadMore(int current_page) { 
       /// onLoadMore(current_page); 
       loadmoreContacts(current_page); 
       Log.e("onLoadMore ", "" + current_page); 
      } 
     }); 

새로운 클래스 만들기