Ошибка GWT CellList: onSelectionChange, индекс за пределами - PullRequest
0 голосов
/ 25 февраля 2012

Я пишу приложение для обмена сообщениями в GWT, и у меня довольно сложная проблема, для которой найти решение. Я работаю с GWT CellList. В моем списке я отображаю все недавние контакты, с которыми пользователь недавно общался. Но допустим, что пользователь пишет сообщение человеку, которого нет в этом списке. Я временно добавляю их в список недавних контактов и обновляю список ячеек, чтобы он показывал ..

Но тогда давайте скажем, что в итоге они не отправляют сообщение. Я должен быть в состоянии обнаружить это и удалить их из списка. Очевидное место для этого - обработчик изменения выбора. Однако на самом деле оказывается, что в обработчике изменения выбора можно изменить список объектов данных, представляющих список ячеек, но когда вы на самом деле помещаете их в список ячеек, я получаю ошибку индексации за границами.

Я подтвердил, что это проблема. В общем, я застрял. Очевидное место, чтобы проверить это, когда вы выбираете другой контакт для просмотра. Затем я могу проверить, были ли отправлены какие-либо сообщения этому другому контакту, и если нет, избавиться от контакта, но мне нужно как-то не делать этого в selectionChangeHandler. У кого-нибудь есть решение / идеи? Я попробовал событие мыши, но это происходит до того, как произойдет событие выбора.

Спасибо за любую помощь заранее: -)

selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
        public void onSelectionChange(SelectionChangeEvent event) {
            ContactDO selectedContact = selectionModel.getSelectedObject();

            //Check if we want to remove a contact from the list
            if ( we want to remove a contact in the list that is not the currently selected contact. ) {

                 //remove contact
                 recentContacts.remove(contactThatisNotSelected);

                 //Refresh the contact cell list
                 contactCellList.setVisibleRange(0, recentContacts.size());
                 contactCellList.setRowCount(recentContacts.size(), true);
                 contactCellList.setRowData(0, recentContacts);
            }


        }
    });

1 Ответ

0 голосов
/ 08 марта 2012

Решением, которое я реализовал, было просто использовать таймер, а затем выполнить работу примерно через 100 мс.Не совсем фанат этого решения.Я все еще ищу другого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...