2017-02-13 2 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

新しいクラスを作成しますか? loadMoreItems()の実装は正しいですか? – user6556461

+0

これはあなた次第です。私はあなたのAPIがどのように動作しているのか分かりません –

+0

10の項目ごとにページ番号を付け、startIndexを10ずつ増やすURLのstartIndexが必要です。追加は常に前の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); 
      } 
     }); 

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