Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NestedScrollView setOnScrollChangeListener api 21

Hello folks I'm trying to handle an onScrolled event in my recyclerView, that's inside a NestedScrollView.

So far, I have found setOnScrollChangeListener, however this method is API 23, and I'm targeting API 21, any idea to handle this issue back in API 21?

like image 277
guisantogui Avatar asked Apr 14 '18 13:04

guisantogui


2 Answers

I think you are using setOnChangeScrollListener with View.OnScrollChangeListener. Please use NestedScrollView.OnScrollChangeListener like that:

 scvProduct.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
        @Override
        public void onScrollChange(NestedScrollView nestedScrollView,int scrollX, int scrollY, int oldScrollX, int oldScrollY) {

            Log.e("ProductFragment","position button " + topPositionButton + " scrollY " + scrollY);
            if(scrollY > oldScrollY){
                Log.e("ProductFragment","down");
            }
            else{
                Log.e("ProductFragment","up");
            }
        }
    });

image compare NestedScrollview and View OnScrollChangeListener

like image 105
NhatVM Avatar answered Sep 20 '22 04:09

NhatVM


After some time I got an idea, I've stopped listening to scroll on RecyclerView and started listening to NestedScrollView onScroll event.

I managed to make my loadOnDemand recyclerView using this snippet

    nsv_posts_timeline.setOnScrollChangeListener(
            NestedScrollView.OnScrollChangeListener {
                                _, scrollX, scrollY, _, oldScrollY ->

        if(scrollY > oldScrollY){
            val totalItens = timelineAdapter.itemCount

            val currentView = rv_timeline.findChildViewUnder(scrollX.toFloat(), scrollY.toFloat())
            val childPosition = rv_timeline.getChildAdapterPosition(currentView)

            if((totalItens/2) - (stepSize/2) <= childPosition && !isLoading){
                isLoading = true
                                          //skip , take
                timelinePresenter.loadMore(totalItens, 5)
            }
        }
    })

isLoading is a class property that I change to false when my callback returns from server

like image 21
guisantogui Avatar answered Sep 18 '22 04:09

guisantogui