2013-12-23 2 views
0

У меня есть две кнопки «Следующий элемент» и «Предыдущий элемент» и некоторый пользовательский виджет, содержащий CellList. На нажатия кнопок Звоню метод моего виджета, который changeselection в CellList, называя это SelectionModel:GWT - Неожиданное срабатывание CellList's SelectionChangeEvent

selectionModel.setSelected(value, true); 

Когда я обновить содержимое CellList, в кнопки работают нормально, но когда я выбираю элемент в списке, нажав на него, это происходит: Например, у меня есть элементы {0, 1, 2, 3, 4, ..} в списке. Я нажимаю на элемент 1, а затем дважды нажимаю кнопку «Следующий элемент». Эти SelectionChangeEvent происходит:

  1. Изменить выбор из 1 -> 2 (на первом нажатии кнопки)
  2. 2 -> 3 (на втором прессе)
  3. 3 -> 1

Но после того, как шаг 2, если я нажимаю «Предыдущий», он правильно возвращается к элементу 1. Таким образом, элемент, который я нажал мышью, не позволяет выделить более 1 шаг вокруг него.
Я понятия не имею, откуда происходит третье событие. Мое единственное догадывание состоит в том, что событие ручного выбора продолжается в ожидании после стрельбы, но я не знаю, как это проверить. Кто-нибудь знает причину этой проблемы?

UPD:
я нашел подтверждение, что выбор, нажав событие продолжает висеть где-то там в EventBus: когда я изменить фильтры поиска я получить доступ SelectionModel таким же образом, как и на нажатия кнопок и выбора набора на первый элемент. Но если бы пользователь нажал на CellList, то произойдет то же самое: во-первых, выбор меняется на 0, второй, он возвращается к ранее выбранному, если новый выбор данных содержит этот элемент.

обн (на вопрос Умит в):

nextButton.addClickHandler(new ClickHandler() { 
    @Override 
    public void onClick(ClickEvent event) { 
     /* Omitting checks that there are elements on the list, 
     some element is selected and isn't last */ 
     T value = dataProvider.getList().get(currentIndex() + 1); 
     singleSelectionModel.setSelected(value, true); 
     singleSelectionModel.isSelected(value); 
     Element rowElement = cellList.getRowElement(index); 
     rowElement.scrollIntoView(); 
    } 
} 

UPD: Найдено, что вызывает эту проблему:http://code.google.com/p/google-web-toolkit/issues/detail?id=6310

+0

разместить код вашего 'ClickCallHandler' для "Следующий элемент" и "предыдущий элемент" –

ответ

0

Кажется, вам нужно использовать HandlerRegistration. Поэтому многократное событие click не вызывается.

См:

GWT Handler Registratin

и

related link

+0

Не знаю, что это ты говоришь о. Для изменения состояния моего виджета на кнопки добавлены обработчики кликов. Но мой вопрос в том, откуда могло прийти это 3-е событие? – Moonsera

+0

Как вы добавляете eventHandler. Возможным случаем может быть: сначала вы добавляете eventHandler (скажем, eHandler1) для первого нажатия, позже на другое нажатие .. вы добавляете еще один eventHandler (скажем, eHandler2). Но первый eHandler1, похоже, не очищается. Таким образом, два eventHandlers получают вызов во втором клике. Вы можете подтвердить это, нажав его три раза .. это идет 3 раза? – dhamibirendra

+0

Это не тот случай. Прежде чем нажимать на элемент самой функции CellList, кнопки работают нормально, но по щелчку кажется, что событие выбора (назовем его manualSelect) не корректно выводится из EventBus, и когда после этого я вызываю его SelectionModel для изменения текущего выбора, manualSelect fires again, возвращая выбор в тот, который я нажал мышью. Даже если я прав о EventBus, я не знаю, почему manualSelect не запускается при первой попытке вызвать SelectionModel, но во второй раз. – Moonsera

Смежные вопросы