I modified the calculateActiveItem method and the calculateMostVisibleItem method.
JakePrim opened this issue · 0 comments
JakePrim commented
I modified the calculateActiveItem method and the calculateMostVisibleItem method.
I think the call to the deactivate
method should destroy the previous call to the deactivate
method on the next display, which is more logical.
` private void calculateActiveItem(ItemsPositionGetter itemsPositionGetter, ListItemData listItemData) {
/** 1. */
int currentItemVisibilityPercents = listItemData.getVisibilityPercents(mListItems);
if (SHOW_LOGS) Logger.v(TAG, "calculateActiveItem, mScrollDirection " + mScrollDirection);
/** 2. */
ListItemData neighbourItemData = new ListItemData();
switch (mScrollDirection) {
case UP:
findPreviousItem(itemsPositionGetter, listItemData, neighbourItemData);
break;
case DOWN:
findNextItem(itemsPositionGetter, listItemData, neighbourItemData);
break;
}
if (SHOW_LOGS)
Logger.v(TAG, "calculateActiveItem, currentItemVisibilityPercents " + currentItemVisibilityPercents);
/** 3. */
if (enoughPercentsForDeactivation(currentItemVisibilityPercents) && neighbourItemData.isAvailable()) {
// neighbour item become active (current)
if (mOldItem == null) {
mOldItem = mCurrentItem;
} else {
mCallback.deactivateCurrentItem(mListItems.get(mOldItem.getIndex()), mOldItem.getView(), mOldItem.getIndex());
mOldItem = mCurrentItem;
}
/** 4. */
setCurrentItem(neighbourItemData);
} else {
calculateMostVisibleItem(itemsPositionGetter, itemsPositionGetter.getFirstVisiblePosition(),
itemsPositionGetter.getLastVisiblePosition());
}
}`