def METHOD_NAME(self, data, flags):
    super(RecycleBoxLayout, self).METHOD_NAME(data, flags)
    changed = self._changed_views
    if (changed is None or
            changed and not self._update_sizes(changed)):
        return
    self.clear_layout()
    self._rv_positions = None
    if not data:
        l, t, r, b = self.padding
        self.minimum_size = l + r, t + b
        return
    view_opts = self.view_opts
    n = len(view_opts)
    for i, x, y, w, h in self._iterate_layout(
            [(opt['size'], opt['size_hint'], opt['pos_hint'],
              opt['size_hint_min'], opt['size_hint_max']) for
             opt in reversed(view_opts)]):
        opt = view_opts[n - i - 1]
        shw, shh = opt['size_hint']
        opt['pos'] = x, y
        wo, ho = opt['size']
        # layout won't/shouldn't change previous size if size_hint is None
        # which is what w/h being None means.
        opt['size'] = [(wo if shw is None else w),
                       (ho if shh is None else h)]
    spacing = self.spacing
    pos = self._rv_positions = [None, ] * len(data)
    if self.orientation == 'horizontal':
        pos[0] = self.x
        last = pos[0] + self.padding[0] + view_opts[0]['size'][0] + \
            spacing / 2.
        for i, val in enumerate(view_opts[1:], 1):
            pos[i] = last
            last += val['size'][0] + spacing
    else:
        last = pos[-1] = \
            self.y + self.height - self.padding[1] - \
            view_opts[0]['size'][1] - spacing / 2.
        n = len(view_opts)
        for i, val in enumerate(view_opts[1:], 1):
            last -= spacing + val['size'][1]
            pos[n - 1 - i] = last