Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从底部刷卡时回收器视图获取数据_Android_Android Recyclerview - Fatal编程技术网

Android 从底部刷卡时回收器视图获取数据

Android 从底部刷卡时回收器视图获取数据,android,android-recyclerview,Android,Android Recyclerview,我想在用户触摸回收器时获取数据,并在回收器已经处于底部时向下滚动(如从底部刷卡,但回收器无法再滚动时)。有什么想法吗 多谢各位 @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); StaggeredGridLayoutManager manager = (Staggered

我想在用户触摸回收器时获取数据,并在回收器已经处于底部时向下滚动(如从底部刷卡,但回收器无法再滚动时)。有什么想法吗

多谢各位

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

       int visibleItemCount = manager.getChildCount();
       int totalItemCount = manager.getItemCount();
       int[] firstVisibleItems = manager.findFirstVisibleItemPositions(null);
       if (firstVisibleItems != null && firstVisibleItems.length > 0) {

        }

       if (visibleItemCount + pastVisibleItems >= totalItemCount) {

     } 

 }

检查此开源库,例如:

它有一个setupMoreLoading方法,当
X
元素被滚动时,它会附加侦听器和调用方法

这里就是这样做的:

     ...
     mInternalOnScrollListener = new RecyclerView.OnScrollListener() {

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

            processOnMore();

            if (mExternalOnScrollListener != null)
                mExternalOnScrollListener.onScrolled(recyclerView, dx, dy);
            if (mSwipeDismissScrollListener != null)
                mSwipeDismissScrollListener.onScrolled(recyclerView, dx, dy);
        }

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            if (mExternalOnScrollListener != null)
                mExternalOnScrollListener.onScrollStateChanged(recyclerView, newState);
            if (mSwipeDismissScrollListener != null)
                mSwipeDismissScrollListener.onScrollStateChanged(recyclerView, newState);
        }
    };
    mRecycler.addOnScrollListener(mInternalOnScrollListener);
    ....

private void processOnMore() {
    RecyclerView.LayoutManager layoutManager = mRecycler.getLayoutManager();
    int lastVisibleItemPosition = getLastVisibleItemPosition(layoutManager);
    int visibleItemCount = layoutManager.getChildCount();
    int totalItemCount = layoutManager.getItemCount();

    if (((totalItemCount - lastVisibleItemPosition) <= ITEM_LEFT_TO_LOAD_MORE ||
         (totalItemCount - lastVisibleItemPosition) == 0 && totalItemCount > visibleItemCount)
        && !isLoadingMore) {

        isLoadingMore = true;
        if (mOnMoreListener != null) {
            mMoreProgress.setVisibility(View.VISIBLE);
            mOnMoreListener.onMoreAsked(mRecycler.getAdapter().getItemCount(), ITEM_LEFT_TO_LOAD_MORE, lastVisibleItemPosition);
        }
    }
}
。。。
mInternalOnScrollListener=new RecyclerView.OnScrollListener(){
@凌驾
已填空的公共空间(RecyclerView RecyclerView、int dx、int dy){
super.onScrolled(recyclerView、dx、dy);
processOnMore();
if(mExternalOnScrollListener!=null)
onScrolled(recyclerView、dx、dy);
if(mSwipeDismissScrollListener!=null)
mSwipeDismissScrollListener.onScrolled(recyclerView、dx、dy);
}
@凌驾
CrollStateChanged上的公共无效(RecyclerView RecyclerView,int newState){
super.onScrollStateChanged(recyclerView、newState);
if(mExternalOnScrollListener!=null)
onScrollStateChanged(recyclerView、newState);
if(mSwipeDismissScrollListener!=null)
mSwipeDismissScrollListener.onScrollStateChanged(recyclerView,newState);
}
};
mRecycler.addOnScrollListener(mInternalOnScrollListener);
....
私有void processOnMore(){
RecyclerView.LayoutManager LayoutManager=mRecycler.getLayoutManager();
int lastVisibleItemPosition=getLastVisibleItemPosition(layoutManager);
int visibleItemCount=layoutManager.getChildCount();
int totalItemCount=layoutManager.getItemCount();
if(((totalItemCount-lastVisibleItemPosition)visibleItemCount)
&&!isLoadingMore){
isLoadingMore=true;
如果(mOnMoreListener!=null){
mmorepregress.setVisibility(View.VISIBLE);
mOnMoreListener.onMoreSask(mRecycler.getAdapter().getItemCount(),项目左\u到\u加载\u更多,最后一个VisibleItemPosition);
}
}
}
试试这个:

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

   if(manager.findLastVisibleItemPosition() == manager.getItemCount()-1) 
   {
        // We have reached the end of the recycler view.
   }
}

15分钟前你也问过同样的问题,对吗?您的代码的结果是什么?先生,虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,则仅链接的答案可能无效。请看我想从底部滑动以加载更多项目的手势。这将在最后一个元素可见时获取数据,而不是在到达底部时