Thursday, June 30, 2011

Activities does not get de-registered..

I am doing a small "test" application and I am using Activities and
Place but can't make it work as I expect..

I have 2 Views, Activities and Places. DefaultView calls Example1View
and Vice Versa ..

In the Example1Activity I override mayStop() so that it returns a
String asking if user wants to "go to Default". It works the first
time - when I hit "go to Default", it ask if I am "sure, and then I
press " 'OK' - that works, it swaps out the Example1View/Activity and
swap in the DefaultView/Activity.

But when I hit the "go to Example1" from the DefaultView/Activity, it
ALSO ask the question. I can see in the Debugger that first the
DefaultActivity is called, and that it behaves as expected (the
mayStop() returns null), but the ExampleView's mayStop() method is
ALSO called?? Even though it is no "in focus" - "it is about to come
in Focus" .. So it seems as the previous Example1Activity is NOT
deregistered on the EventBus, after I hit the "OK" (which calles the
onClose() method and should cause the ActivityManager to de-registere
the "Activity"..)

Any Ideas ???

Rehgards Jesper - Running GWT 2.2.1 and it is same behavior on FF,
Chrome and Safari


Here is my code:

DefaultPlace.java:
public class DefaultPlace extends Place {}

DefaultView.java:
public class DefaultView extends Composite implements IsWidget{
HorizontalPanel hp = new HorizontalPanel();
Button b = new Button("Go To Example1");

public DefaultView() {
hp.add(b);
initWidget(hp);

}

HasClickHandlers getButton() {
return b;
}
}

DefaultActivity.java
public class DefaultActivity extends AbstractActivity implements
Activity {

ClientFactory clientFactory;
DefaultView defaultView;

public DefaultActivity(DefaultPlace place, ClientFactory
clientFactory) {
this.clientFactory = clientFactory;
}

public void start(AcceptsOneWidget panel, EventBus eventBus) {
defaultView = clientFactory.getDefaultView();
defaultView.getButton().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
clientFactory.getPlaceController().goTo(new
Example1Place());
}
});
panel.setWidget(defaultView.asWidget());
}
}

Example1Place.java:
public class Example1Place extends Place{}

Example1View
public class Example1View extends Composite implements IsWidget{
HorizontalPanel hp = new HorizontalPanel();
Button b = new Button("Go To Default");

public Example1View() {
hp.add(b);
initWidget(hp);
}

HasClickHandlers getButton() {
return b;
}
}

Example1Activity.java
public class Example1Activity extends AbstractActivity implements
Activity {

ClientFactory clientFactory;
Example1View example1View;

public Example1Activity(Example1Place place, ClientFactory
clientFactory) {
this.clientFactory = clientFactory;

}

public void start(AcceptsOneWidget panel, EventBus eventBus) {
example1View = clientFactory.getExample1View();
example1View.getButton().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
clientFactory.getPlaceController().goTo(new
DefaultPlace()
);
}
});
panel.setWidget(example1View.asWidget());
}

@Override
public String mayStop() {
return "you sure??";
}
}


AppActivityMapper.java:
public class AppActivityMapper implements ActivityMapper {
private ClientFactory clientFactory;

public AppActivityMapper(ClientFactory clientFactory) {
super();
this.clientFactory = clientFactory;
}

public Activity getActivity(Place place) {
if (place instanceof DefaultPlace)
return new DefaultActivity((DefaultPlace) place,
clientFactory);
else if (place instanceof Example1Place)
return new Example1Activity((Example1Place) place,
clientFactory);
return null;
}
}

ClientFactory.java:
public interface ClientFactory {

DefaultView getDefaultView();
Example1View getExample1View();
EventBus getEventBus();
PlaceController getPlaceController();

}

ClientFactoryImpl.java:
public class ClientFactoryImpl implements ClientFactory {

private final DefaultView DEFAULT_VIEW = new DefaultView();
private final Example1View EXAMPLE_1_VIEW = new Example1View();
private final EventBus EVENT_BUS = new ResettableEventBus(new
SimpleEventBus());
private final PlaceController PLACE_CONTROLLER = new
PlaceController(EVENT_BUS);

public DefaultView getDefaultView() {
return DEFAULT_VIEW;
}

public Example1View getExample1View() {
return EXAMPLE_1_VIEW;
}

public EventBus getEventBus() {
return EVENT_BUS;
}

public PlaceController getPlaceController() {
return PLACE_CONTROLLER;
}
}

MVP.java
public class MVP implements EntryPoint {

public void onModuleLoad() {

SimplePanel display = new SimplePanel();
DefaultPlace defaultPlace = new DefaultPlace();
ClientFactory clientFactory = GWT.create(ClientFactory.class);
EventBus eventBus = clientFactory.getEventBus();
PlaceController placeController =
clientFactory.getPlaceController();
ActivityMapper activityMapper = new
AppActivityMapper(clientFactory);
ActivityManager activityManager = new
ActivityManager(activityMapper, eventBus);
activityManager.setDisplay(display);
placeController.goTo(defaultPlace);
RootPanel.get().add(display);
}
}

--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To post to this group, send email to google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to google-web-toolkit+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.

No comments:

Post a Comment