2017-02-13 89 views
-1

我知道有很多关于同一问题的问题,但我无法找到我的问题。当我在我的HttpRequest类中打印URL时,它显示正确的URL,但它仍然加载相同的数据。RecyclerView无尽滚动

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分页?是我的loadMoreItems()的实现是否正确? – user6556461

+0

这是由你自己决定的,我不知道你的api是如何工作的 –

+0

它需要url中的startIndex,我需要每隔10个参数分页并将startIndex增加10,问题出现在你的代码中我的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); 
      } 
     }); 

创建新类

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