2017-09-23 237 views
-1

我有一個recyclerview被填充到另一個線程中,但addOnScrollListener中的代碼在滾動時不起作用。recyclerview addOnScrollListener does not work

private class LoadTask extends AsyncTask< NodeList, Void, Void> { 

    @Override 
    protected Void doInBackground(NodeList... params) { 
     recyclerView = (RecyclerView) findViewById(R.id.recyclerview); 
    adapter = new RecyclerViewAdapter(JoinSearchApps.this); 
    recyclerView.setAdapter(adapter); 
    GridLayoutManager lLayout = new GridLayoutManager(JoinSearchApps.this, 1); 

    recyclerView.setLayoutManager(lLayout); 

    recyclerView.setItemAnimator(new DefaultItemAnimator()); 
    recyclerView.addOnScrollListener(new PaginationScrollListener(lLayout) { 
     @Override 
     protected void loadMoreItems() { 
      Log.d("inaddOnScrollListener","addOnScrollListener"); 
      } 
     } 

     return null; 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
      LoadTask loader=new LoadTask(); 
      loader.execute(); 
    } 
} 

回答

0

你設置adapterrecyclerview

改變你的代碼像下面的代碼

recyclerView = (RecyclerView) findViewById(R.id.recyclerview); 
GridLayoutManager lLayout = new GridLayoutManager(JoinSearchApps.this, 1); 
recyclerView.setLayoutManager(lLayout); 
adapter = new RecyclerViewAdapter(JoinSearchApps.this); 
recyclerView.setAdapter(adapter); 
0

爲了更好地便於之前必須setLayoutManager,您可以添加其他類EndlessRecyclerOnScrollListener

步驟1:創建這個班級

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

    private int previousTotal = 0; // The total number of items in the dataset after the last load 
    private boolean loading = true; // True if we are still waiting for the last set of data to load. 
    private int visibleThreshold = 0; // The minimum amount of items to have below your current scroll position before loading more. 
    int firstVisibleItem, visibleItemCount, totalItemCount; 

    private int current_page = 0; 

    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; 
      } 
     } 
     //Log.d(TAG, "loading---"+loading); 
     //Log.d(TAG, (totalItemCount - visibleItemCount) + "-checking-" + (firstVisibleItem + visibleThreshold)); 
     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); 
} 

第2步:調用方法是這樣的:

mRecyclerView.setOnScrollListener(new EndlessRecyclerOnScrollListener(mLayoutManager) { 
      @Override 
      public void onLoadMore(int current_page) { 
       int listSize = notificationList.size(); 
       if (listSize < notificationCount) { 
        offset = offset + 10; 
        limit = limit + 10; 
        getNotificationsScroll(offset, 10); 
       } 
      } 
     }); 
0

我有類似的問題,我解決它使用此代碼...首先創建該類

public abstract class EndlessOnScrollListener extends OnScrollListener { 

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

// use your LayoutManager instead 
private LinearLayoutManager llm; 

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

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

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

第二..在你的活動中使用這個

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview); 
GridLayoutManager lLayout = new GridLayoutManager(JoinSearchApps.this, 1); 
recyclerView.setLayoutManager(lLayout); 
recyclerView.setItemAnimator(new DefaultItemAnimator()); 
adapter = new RecyclerViewAdapter(JoinSearchApps.this); 
recyclerView.setAdapter(adapter); 

recyclerView.addOnScrollListener(new EndlessOnScrollListener() { 
@Override 
public void onScrolledToEnd() { 
    if (!loading) { 
     loading = true; 
Log.d("inaddOnScrollListener","addOnScrollListener"); 
     //Do your operation here and notify the adapter by youradapter.notifyDataSetChanged() 
    } 
    loading = false; 
} 
}); 

我希望它能爲你工作0。

0

您無法調用PaginationScrollListener內部的任何方法。你稱它爲loadMoreItems,但該函數不會被調用。您可能希望將其重命名爲onScrolled或PaginationScrollListener的其中一種方法