PagingLibrary with recyclerView can not stop loadAfter()












0















loadAfter() can't stop even though I didn't swipe the RecyclerView.
It keeps calling onBindView->loadAfter()



I tried to debug, find these:
method loadAroundInternal in class ContiguousPagedList



int appendItems = getAppendItemsRequested(mConfig.prefetchDistance, index, mStorage.getLeadingNullCount() + mStorage.getStorageCount());


index keep ++ while getBindView in recyclerView is being bigger
the appendItem is always >0



I'm not sure, but I think maybe



network->appendPage->notifyInserted->bindView->loadAfter->network


then the recyclerView adapter execute onBindView.But the bindViewHolder which position should't call called. So it can't stop.



I don't know whether I'm right or not.And I don't know how to fix it.



below are some relevant code I wrote:



@Override
public void onBindViewHolder(@NonNull BaseViewHolder holder, int position) {
VB binding = DataBindingUtil.getBinding(holder.itemView);
setData(binding, getItem(position));
binding.executePendingBindings();
}


In my own PagingDataSource which extends PageKeyedDataSource



@Override
public void loadAfter(@NonNull LoadParams<Integer> params, @NonNull LoadCallback<Integer, T> callback) {
singleCreator.createSingle(params.key, params.requestedLoadSize)
.subscribe(new SingleObserver<Page<T>>() {
@Override
public void onSubscribe(Disposable d) {

}

@Override
public void onSuccess(Page<T> tPage) {
callback.onResult(tPage.list, tPage.pageNumber + 1);
}

@Override
public void onError(Throwable e) {

}
});

}

public interface SingleCreator<T> {
SingleSubscribeProxy<Page<T>> createSingle(int page, int pageSize);
}


If other things need, I will edit the question



=====================================



Add message:I found if I set an absolute value for recyclerView's height, such as 100dp, It works fine. Butwork with problem when wrap_content and match_parent.



So the problem now is:when 2 recyclerViews in nestedScrollView and with a wrap_content or match_parent, the bindView can't stop loadAfter() which is a method of paging library.










share|improve this question





























    0















    loadAfter() can't stop even though I didn't swipe the RecyclerView.
    It keeps calling onBindView->loadAfter()



    I tried to debug, find these:
    method loadAroundInternal in class ContiguousPagedList



    int appendItems = getAppendItemsRequested(mConfig.prefetchDistance, index, mStorage.getLeadingNullCount() + mStorage.getStorageCount());


    index keep ++ while getBindView in recyclerView is being bigger
    the appendItem is always >0



    I'm not sure, but I think maybe



    network->appendPage->notifyInserted->bindView->loadAfter->network


    then the recyclerView adapter execute onBindView.But the bindViewHolder which position should't call called. So it can't stop.



    I don't know whether I'm right or not.And I don't know how to fix it.



    below are some relevant code I wrote:



    @Override
    public void onBindViewHolder(@NonNull BaseViewHolder holder, int position) {
    VB binding = DataBindingUtil.getBinding(holder.itemView);
    setData(binding, getItem(position));
    binding.executePendingBindings();
    }


    In my own PagingDataSource which extends PageKeyedDataSource



    @Override
    public void loadAfter(@NonNull LoadParams<Integer> params, @NonNull LoadCallback<Integer, T> callback) {
    singleCreator.createSingle(params.key, params.requestedLoadSize)
    .subscribe(new SingleObserver<Page<T>>() {
    @Override
    public void onSubscribe(Disposable d) {

    }

    @Override
    public void onSuccess(Page<T> tPage) {
    callback.onResult(tPage.list, tPage.pageNumber + 1);
    }

    @Override
    public void onError(Throwable e) {

    }
    });

    }

    public interface SingleCreator<T> {
    SingleSubscribeProxy<Page<T>> createSingle(int page, int pageSize);
    }


    If other things need, I will edit the question



    =====================================



    Add message:I found if I set an absolute value for recyclerView's height, such as 100dp, It works fine. Butwork with problem when wrap_content and match_parent.



    So the problem now is:when 2 recyclerViews in nestedScrollView and with a wrap_content or match_parent, the bindView can't stop loadAfter() which is a method of paging library.










    share|improve this question



























      0












      0








      0


      1






      loadAfter() can't stop even though I didn't swipe the RecyclerView.
      It keeps calling onBindView->loadAfter()



      I tried to debug, find these:
      method loadAroundInternal in class ContiguousPagedList



      int appendItems = getAppendItemsRequested(mConfig.prefetchDistance, index, mStorage.getLeadingNullCount() + mStorage.getStorageCount());


      index keep ++ while getBindView in recyclerView is being bigger
      the appendItem is always >0



      I'm not sure, but I think maybe



      network->appendPage->notifyInserted->bindView->loadAfter->network


      then the recyclerView adapter execute onBindView.But the bindViewHolder which position should't call called. So it can't stop.



      I don't know whether I'm right or not.And I don't know how to fix it.



      below are some relevant code I wrote:



      @Override
      public void onBindViewHolder(@NonNull BaseViewHolder holder, int position) {
      VB binding = DataBindingUtil.getBinding(holder.itemView);
      setData(binding, getItem(position));
      binding.executePendingBindings();
      }


      In my own PagingDataSource which extends PageKeyedDataSource



      @Override
      public void loadAfter(@NonNull LoadParams<Integer> params, @NonNull LoadCallback<Integer, T> callback) {
      singleCreator.createSingle(params.key, params.requestedLoadSize)
      .subscribe(new SingleObserver<Page<T>>() {
      @Override
      public void onSubscribe(Disposable d) {

      }

      @Override
      public void onSuccess(Page<T> tPage) {
      callback.onResult(tPage.list, tPage.pageNumber + 1);
      }

      @Override
      public void onError(Throwable e) {

      }
      });

      }

      public interface SingleCreator<T> {
      SingleSubscribeProxy<Page<T>> createSingle(int page, int pageSize);
      }


      If other things need, I will edit the question



      =====================================



      Add message:I found if I set an absolute value for recyclerView's height, such as 100dp, It works fine. Butwork with problem when wrap_content and match_parent.



      So the problem now is:when 2 recyclerViews in nestedScrollView and with a wrap_content or match_parent, the bindView can't stop loadAfter() which is a method of paging library.










      share|improve this question
















      loadAfter() can't stop even though I didn't swipe the RecyclerView.
      It keeps calling onBindView->loadAfter()



      I tried to debug, find these:
      method loadAroundInternal in class ContiguousPagedList



      int appendItems = getAppendItemsRequested(mConfig.prefetchDistance, index, mStorage.getLeadingNullCount() + mStorage.getStorageCount());


      index keep ++ while getBindView in recyclerView is being bigger
      the appendItem is always >0



      I'm not sure, but I think maybe



      network->appendPage->notifyInserted->bindView->loadAfter->network


      then the recyclerView adapter execute onBindView.But the bindViewHolder which position should't call called. So it can't stop.



      I don't know whether I'm right or not.And I don't know how to fix it.



      below are some relevant code I wrote:



      @Override
      public void onBindViewHolder(@NonNull BaseViewHolder holder, int position) {
      VB binding = DataBindingUtil.getBinding(holder.itemView);
      setData(binding, getItem(position));
      binding.executePendingBindings();
      }


      In my own PagingDataSource which extends PageKeyedDataSource



      @Override
      public void loadAfter(@NonNull LoadParams<Integer> params, @NonNull LoadCallback<Integer, T> callback) {
      singleCreator.createSingle(params.key, params.requestedLoadSize)
      .subscribe(new SingleObserver<Page<T>>() {
      @Override
      public void onSubscribe(Disposable d) {

      }

      @Override
      public void onSuccess(Page<T> tPage) {
      callback.onResult(tPage.list, tPage.pageNumber + 1);
      }

      @Override
      public void onError(Throwable e) {

      }
      });

      }

      public interface SingleCreator<T> {
      SingleSubscribeProxy<Page<T>> createSingle(int page, int pageSize);
      }


      If other things need, I will edit the question



      =====================================



      Add message:I found if I set an absolute value for recyclerView's height, such as 100dp, It works fine. Butwork with problem when wrap_content and match_parent.



      So the problem now is:when 2 recyclerViews in nestedScrollView and with a wrap_content or match_parent, the bindView can't stop loadAfter() which is a method of paging library.







      android android-recyclerview android-paging






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 15 '18 at 3:48







      user2545386

















      asked Nov 15 '18 at 3:05









      user2545386user2545386

      879




      879
























          1 Answer
          1






          active

          oldest

          votes


















          0














          So the reason why It happened
          When a network result backs, the recycleView refresh.
          Since it's in a nestedScrollView, it has no exact height.
          Then onSizeChanged->getItem->network.



          For me, the solution is
          write a custom linearLayout which implements NestedScrollingParent2;






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53311826%2fpaginglibrary-with-recyclerview-can-not-stop-loadafter%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            So the reason why It happened
            When a network result backs, the recycleView refresh.
            Since it's in a nestedScrollView, it has no exact height.
            Then onSizeChanged->getItem->network.



            For me, the solution is
            write a custom linearLayout which implements NestedScrollingParent2;






            share|improve this answer




























              0














              So the reason why It happened
              When a network result backs, the recycleView refresh.
              Since it's in a nestedScrollView, it has no exact height.
              Then onSizeChanged->getItem->network.



              For me, the solution is
              write a custom linearLayout which implements NestedScrollingParent2;






              share|improve this answer


























                0












                0








                0







                So the reason why It happened
                When a network result backs, the recycleView refresh.
                Since it's in a nestedScrollView, it has no exact height.
                Then onSizeChanged->getItem->network.



                For me, the solution is
                write a custom linearLayout which implements NestedScrollingParent2;






                share|improve this answer













                So the reason why It happened
                When a network result backs, the recycleView refresh.
                Since it's in a nestedScrollView, it has no exact height.
                Then onSizeChanged->getItem->network.



                For me, the solution is
                write a custom linearLayout which implements NestedScrollingParent2;







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 18 '18 at 15:04









                user2545386user2545386

                879




                879






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53311826%2fpaginglibrary-with-recyclerview-can-not-stop-loadafter%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    這個網誌中的熱門文章

                    Post-Redirect-Get with Spring WebFlux and Thymeleaf

                    Xamarin.form Move up view when keyboard appear

                    JBPM : POST request for execute process go wrong