code: private void onChangedImpl(final int preferableCenterPosition) {
          for (ListOnChangedListener listener: mOnChangedListeners) {
              listener.onChangedStart(this);
          }
  
          Log.d(Log.SUBSYSTEM.LAYOUT, TAG, "onChangedImpl(%s): items [%d] views [%d] mLayouts.size() = %d " +
                          "preferableCenterPosition = %d",
                  getName(), getDataCount(), getViewCount(), mContent.mLayouts.size(), preferableCenterPosition);
  
          // TODO: selectively recycle data based on the changes in the data set
          mPreferableCenterPosition = preferableCenterPosition;
          recycleChildren();
      }
docs: This method is called if the data set has been changed. Subclasses might want to override
  this method to add some extra logic.
  
  Go through all items in the list:
  - reuse the existing views in the list
  - add new views in the list if needed
  - trim the unused views
  - request re-layout
  
  @param preferableCenterPosition the preferable center position. If it is -1 - keep the
  current center position.