Похоже, вам просто нужен какой-то флаг, чтобы определить, является ли это событие прокрутки, созданное пользователем, или из кода (программно).
Если вы создаете событие прокрутки программно, тогда установите некоторое логическое значение, давайтеназовите это ignoreScrollEvent
, к истине.Что-то вроде этого (псевдокод):
private boolean ignoreScrollEvent = false;
public void scrollChanged(Manager manager, int newHorizontalScroll,
int newVerticalScroll) {
if (!ignoreScrollEvent) {
ignoreScrollEvent = true;
// recalculate the newHorizontalScroll so the field in the focus
// gets in the middle
horizontalScrollLayout.setHorizontalScroll(newHorizontalScroll);
int fieldIndex = horizontalScrollLayout.getFieldAtLocation(
newHorizontalScroll + customfieldwidth, 0
);
Field f = horizontalScrollLayout.getField(fieldIndex);
f.setFocus();
invalidate();
} else {
ignoreScrollEvent = false;
}
}