code: public void loaded(int startIndex, List<T> data, int totalRows, boolean cacheData) {
          lastScrollTop = tableBody.scrollTop();
          setTotalRows(totalRows);
          setVisibleRange(startIndex, loaderSize);
  
          if(cacheData) {
              dataCache.addCache(startIndex, data);
          }
          super.loaded(startIndex, data);
          loading = false;
  
          if(forceScroll) {
              forceScroll = false;
              updateRows((int) Math.ceil(tableBody.scrollTop() / getCalculatedRowHeight()), false);
          }
  
          // Ensure selection persistence
          for(T model : selectedModels) {
              Element row = getRowElementByModel(model);
              if(row != null) {
                  selectRow(row, false);
              }
          }
      }
docs: With infinite data loading it is often required to
  change the total rows, upon loading of new data.
  See {@link #loaded(int, List)} for standard use.
  
  @param startIndex the new start index
  @param data the new list of data loaded
  @param totalRows the new total row count