J'essaie de me familiariser avec les activités et les lieux de GWT. Je suis en train de tester avec un code source trouvé à l'origine sur ce bon blog post.Les gestionnaires d'activité ne sont pas supprimés
Je trouve que les gestionnaires qui sont ajoutés pendant bind() ne semblent jamais être supprimés. Ma petite compréhension du Activity javadoc m'a fait penser qu'ils devraient être retirés automagiquement au moment où la méthode onStop() de l'activité est appelée. Tous les gestionnaires d'événements enregistrés ont été supprimés avant l'appel de la méthode . Mais chaque fois que je clique sur un bouton, le gestionnaire correspondant est appelé n + 1 fois.
Qu'est-ce qui me manque? S'il vous plaît laissez-moi savoir s'il y a plus d'informations que je peux fournir.
Voici un extrait pertinent du code:
public class ContactsActivity extends AbstractActivity {
private List<ContactDetails> contactDetails;
private final ContactsServiceAsync rpcService;
private final EventBus eventBus;
private final IContactsViewDisplay display;
private PlaceController placeController;
public interface IContactsViewDisplay {
HasClickHandlers getAddButton();
HasClickHandlers getDeleteButton();
HasClickHandlers getList();
void setData(List<String> data);
int getClickedRow(ClickEvent event);
List<Integer> getSelectedRows();
Widget asWidget();
}
public ContactsActivity(ClientFactory factory) {
GWT.log("ContactActivity: constructor");
this.rpcService = factory.getContactServiceRPC();
this.eventBus = factory.getEventBus();
this.display = factory.getContactsView();
this.placeController = factory.getPlaceController();
}
@Override
public void start(AcceptsOneWidget container, EventBus eventBus) {
GWT.log("ContactActivity: start()");
bind();
container.setWidget(display.asWidget());
fetchContactDetails();
}
public void bind() {
GWT.log("ContactActivity: bind()");
display.getAddButton().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
GWT.log("Add button clicked");
ContactsActivity.this.placeController.goTo(new NewContactPlace(""));
}
});
display.getDeleteButton().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
GWT.log("ContactActivity: Delete button clicked");
deleteSelectedContacts();
}
});
display.getList().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
GWT.log("ContactActivity: List clicked");
int selectedRow = display.getClickedRow(event);
if (selectedRow >= 0) {
String id = contactDetails.get(selectedRow).getId();
ContactsActivity.this.placeController.goTo(new EditContactPlace(id));
}
}
});
}
merci beaucoup pour votre suggestion. Je suis maintenant capable de désenregistrer les gestionnaires dans onStop(). est-il plus courant et préférable de passer les gestionnaires via EventBus dans AbstractActivity # start()? Comment cela se fait-il autre que d'utiliser @UiHandler? – Justin
EventBus est destiné aux événements inter-applications et non aux événements d'interface utilisateur. Vous faites les choses correctement. –