向下滚动时,recyclerview中的嵌套滚动视图不会触发onscrolllistener [英] nested scrollview inside recyclerview not triggering onscrolllistener when scrolling down

查看:90
本文介绍了向下滚动时,recyclerview中的嵌套滚动视图不会触发onscrolllistener的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

修改:

我已经从Web服务加载了200多个数据.当我向下滚动recyclerview时,它并没有触发scrollLisener.

I have loading more than 200 datas from webservice.When I am scrolling down the recyclerview, it is not triggering the scrollLisener.

因为,如果我不使用dy> 0条件,它将首先加载所有接下来的20个数据,20个数据,依此类推,最初是在进行此活动时.

Because, if I'm not used dy>0 condition, it is loading all next 20 datas, 20 datas and so on, initially when coming to this activity.

下面,我发布了与此相关的代码.

Below I have posted the code relevant to that.

Logcat:

E/dy: 0

活动代码:

recyclerView = (RecyclerView) findViewById(R.id.rv_list_tab_home_recycler);

recyclerView.setHasFixedSize(true);

mLayoutManager = new LinearLayoutManager(this);

recyclerView.setLayoutManager(mLayoutManager);

//homePostitemsAdapter = new UserPostAdapter(TabHomeActivity.this, homePostItemsList);
homePostitemsAdapter = new TabHomeAdapter(homePostItemsList, recyclerView);

//  recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(homePostitemsAdapter);
recyclerView.setNestedScrollingEnabled(false);

适配器代码:

private int visibleThreshold = 5;
private int lastVisibleItem, totalItemCount;
private boolean loading;
private OnLoadMoreListener onLoadMoreListener;

public TabHomeAdapter(List<HomePostItems> objects, RecyclerView recycle) {

    homePostArrListItems = objects;

    if (recycle.getLayoutManager() instanceof LinearLayoutManager) {

        final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recycle
                .getLayoutManager();

        Log.e("LinearLayoutManager", "Test");

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

                totalItemCount = linearLayoutManager.getItemCount();
                lastVisibleItem = linearLayoutManager
                                .findLastVisibleItemPosition();
                Log.e("dy", ""+dy);

                if (!loading
                                && totalItemCount <= (lastVisibleItem + visibleThreshold ) && dy > 0) {
                    // End has been reached
                    // Do something

                    Log.e("totalItemCount", ""+totalItemCount);
                    Log.e("lastVisibleItem", ""+lastVisibleItem);
                    Log.e("visibleThreshold", ""+visibleThreshold);
                    Log.e("loading", ""+loading);
                    Log.e("onLoadMoreListener", ""+onLoadMoreListener);

                    if (onLoadMoreListener != null) {;
                        onLoadMoreListener.onLoadMore();
                    }

                    loading = true;
                }

            }
        });
    } 

    public void setLoaded() {
        loading = false;
    }

    @Override
    public int getItemCount() {    
        return homePostArrListItems.size(); 
    }

    public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) {
        this.onLoadMoreListener = onLoadMoreListener;
    }

    public static class ProgressViewHolder extends RecyclerView.ViewHolder {
        public ProgressBar progressBar;
        public ProgressViewHolder(View v) {
            super(v);
            progressBar = (ProgressBar) v.findViewById(R.id.progressBar1);
        }
    }
}

当我最初参加此活动时,我将dy设为0.当滚动RecyclerView时,dy不会在LogCat中触发.

When I initially came to this activity, I am getting dy as 0. When I'm scrolling the RecyclerView , dy is not triggering in LogCat.

我认为由于NestedScrollView,它无法正常工作.但是我需要嵌套滚动视图,因为我需要在RecyclerView之前向下滚动一些视图.

I think because of the NestedScrollView it is not working.But I need nested scroll view because I need to scroll down some views before RecyclerView.

推荐答案

如果要延迟加载,请查看我的RecyclerAdapter

If it is lazy loading you want then have a look at my RecyclerAdapter

@Override
public void onBindViewHolder(VH viewHolder, final int position) {

    // Set Data to Views

    if(position == count) {
        // When last item is reached.

        if (onLoadMoreListener != null) {;
            onLoadMoreListener.onLoadMore();
        }
    }
}

我认为这是实现延迟加载的更简单且相当便宜的方法.

I think this is easier and fairly inexpensive way to achieve lazy loading.

这篇关于向下滚动时,recyclerview中的嵌套滚动视图不会触发onscrolllistener的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆