Estoy escribiendo una aplicación de mensajería en GWT y tengo un problema bastante difícil de resolver. Estoy trabajando con una CellList de GWT. En mi lista de celdas, estoy mostrando todos los contactos recientes con los que un usuario se ha comunicado recientemente. Pero digamos que un usuario está escribiendo un mensaje a una persona que no está en esa lista. Los agrego temporalmente a la lista RecentContacts y actualizo CellList para que se muestre ...

Pero entonces digamos que terminan no enviando el mensaje. Necesito poder detectar eso y eliminarlos de la lista. El lugar obvio para hacer eso es en el manejador de cambios de selección. Sin embargo, en realidad resulta que dentro de un controlador de cambio de selección, si puede modificar la lista de objetos de datos que representan la lista de celdas, pero cuando realmente los empuja a la lista de celdas, obtengo un error de índice fuera de límites.

He verificado que este es el problema. Así que básicamente estoy atascado. El lugar obvio para verificar esto es cuando selecciona un contacto diferente para ver. Luego puedo verificar si se envió algún mensaje a este otro contacto, y si no, deshacerme del contacto, pero de alguna manera necesito no hacerlo en el selectionChangeHandler. ¿Alguien tiene alguna solución / idea? Probé un evento de mouse hacia arriba, pero eso termina sucediendo antes de que tenga lugar el evento de selección.

Gracias por cualquier ayuda de antemano :-)

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);
            }


        }
    });
gwt
0
spierce7 25 feb. 2012 a las 14:40
¿Cuándo ocurre el índice fuera de límites? Si está dentro del código GWT, suena como un error. ¿Revisaste el rastreador de problemas para eso?
 – 
Ümit
26 feb. 2012 a las 15:06
No, pero hice muchas búsquedas, y normalmente aparece algo debajo del rastreador de problemas si hay algo para eso. Parece que antes del evento de selección, el código está grabando, o tomando nota del tamaño de la lista, y espera que sea el mismo después. Lo arreglé con una curita usando un temporizador que hace la lógica 100 ms después.
 – 
spierce7
27 feb. 2012 a las 08:58

1 respuesta

La mejor respuesta

La solución que implementé fue simplemente usar un temporizador y luego hacer el trabajo unos 100 ms después. Realmente no soy un fanático de esta solución. Todavía estoy buscando otro.

0
spierce7 8 mar. 2012 a las 01:25